开发者社区> 问答> 正文

canal解析RDS和普通mysql所生成的json不一致

环境:

centos7 jdk1.8 canal1.1.3

配置:

canal.mq.flatMessage = true

问题:

用canal解析binlog推送至kakfa,发现解析阿里云rds和解析普通的mysql所生成的json不一致,是我配置的有问题,还是canal本身就是这么设计的呢? 怎么才能做到生成的json统一呢?

例子:

对数据进行一次update操作,canal解析情况: canal解析rds后的json:

{ "data": [ { "ID": "267507", "USER_ID": "18812431504", "TOKEN": "868600033685643", "TYPE": "I", "TIME_CREATED": "1524551869232", "DATE_UPDATED": "1557158400000", "TIME_UPDATED": "1557228368301" } ], "database": "test_db", "es": 1557228368000, "id": 142, "isDdl": false, "mysqlType": { "ID": "bigint(20)", "USER_ID": "bigint(20)", "TOKEN": "varchar(50)", "TYPE": "char(1)", "TIME_CREATED": "bigint(20)", "DATE_UPDATED": "bigint(20)", "TIME_UPDATED": "bigint(20)" }, "old": [ { "TIME_UPDATED": "1557224782262" } ], "pkNames": [ "ID" ], "sql": "", "sqlType": { "ID": -5, "USER_ID": -5, "TOKEN": 12, "TYPE": 1, "TIME_CREATED": -5, "DATE_UPDATED": -5, "TIME_UPDATED": -5 }, "table": "test_table", "ts": 1557228368469, "type": "UPDATE" }

canal解析普通mysql后的json:

{ "data": null, "database": "test_db", "es": 1557199629000, "id": 2, "isDdl": false, "mysqlType": null, "old": null, "pkNames": null, "sql": "update test_table set name = 'zs' where id = 1", "sqlType": null, "table": "test_table", "ts": 1557199629315, "type": "UPDATE" }

原提问者GitHub用户0xcafedaddy

展开
收起
数据大拿 2023-05-04 18:19:59 131 0
1 条回答
写回答
取消 提交回答
  • 这是因为数据库的binlog format是STATEMENT,改成ROW就可以了

    原回答者GitHub用户chuangzai

    2023-05-05 10:47:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
TcpRT:阿里云RDS智能诊断系统云上大规模部署自动化服务的客户实践经验 立即下载
TcpRT:面向大规模海量云数据库的服务质量实时采集与诊断系 立即下载
袋鼠云基于阿里云RDS的数据库架构实践 立即下载

相关镜像