源数据库使用命令:
INSERT INTO mirror
(id
, key
, value
, type
, op_time
) VALUES (3,'3','{}','meta','2016-11-11 11:11:11');
adapter 报错:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'key) VALUES ('2016-11-11 11:11:11',3,'meta','{}','3')' at line 1
按现在情况看来,同步过来的语句是比源语句少了 `` 转义的,因此产生的语法错误,请问一下有什么方法可以避免这个问题?
原提问者GitHub用户Near-Zhang
该是jdbc驱动的问题, 把canal-adapter/lib 中的mysql-connector-java-5.1.40.jar删掉, 替换对应mariadb的jdbc
原回答者GitHub用户rewerma
问题出在了key这个字段上,key是MariaDB的保留字,需要使用反引号()进行转义。建议在源数据库的SQL语句中使用反引号()对所有字段名进行转义,如下所示:
INSERT INTO mirror (id
, key
, value
, type
, op_time
) VALUES (3,'3','{}','meta','2016-11-11 11:11:11'); 这样在同步到目标数据库时就不会出现语法错误了。当然,如果源数据库中有大量类似问题的SQL语句,也可以考虑在canal_adapter中使用正则表达式等方式对SQL语句进行修改。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。