开发者社区> 问答> 正文

canal_adapter消费消息到mariadb时,语法报错

源数据库使用命令:

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

展开
收起
古拉古拉 2023-05-08 17:06:47 95 0
2 条回答
写回答
取消 提交回答
  • 该是jdbc驱动的问题, 把canal-adapter/lib 中的mysql-connector-java-5.1.40.jar删掉, 替换对应mariadb的jdbc

    原回答者GitHub用户rewerma

    2023-05-09 18:36:52
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    问题出在了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语句进行修改。

    2023-05-08 17:29:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关镜像