json类型数据不一致

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:tidb 4.0.8 dm:2.0 nightly
  • 【问题描述】:使用dm工具同步mysql数据到tidb,发现json 类型得字段值,在tidb和mysql中有一些区别:

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

请问目前 上游 MySQL 的版本是什么

先排除下上下游元数据是否一致
先看下 json 的元数据在上下游数据库是否一致。看起来 TiDB 中的 json 元素提取时都是以 string 类型进行的 数据提取。
并且排查下Binlog event 的解析失真问题
建议跟踪下 对应记录的 binlog event 具体的数据内容。

mysql版本是5.7.27得, 下面是具体得binlog
@48=’\x00\x08\x00Ô\x00<\x00\x06\x00B\x00\x09\x00K\x00\x0a\x00U\x00\x0c\x00a\x00\x0c\x00m\x00\x13\x00<80>\x00\x14\x00<94>\x00\x14\x00\x0c¨\x00\x0c®\x00\x0b³\x00\x0c»\x00\x0cÄ\x00\x0cÊ\x00\x0cÏ\x00\x0cÒ\x00itemNostoreAreamaxSignQtydeliveryDatetaxFreePricesettlementW houseproductOutputTaxCodeproductOutputTaxRate\x0500010\x04B998<8f>Âõ(\x5c<8f>0@\x0820210129\x0567.00\x04W0G2\x02X0\x010’ /* JSON meta=4 nullable=0 is_null=0 *

看了一下响应程序代码得json类型定义,有问题得key是定义了bigdecimal,如果定义为string就没问题

使用 mysqlbinlog -vv --decode-rows 解析看下对应的 SQL
然后 手动在下游 TiDB 插入数据确认对应的字段是否会发生隐式转换

测试了下 看来 是 tidb 本身对 json 类型 中,全零小数位进行了 转换

tidb 本身只是兼容 MySQL 协议,部分表现形式还是会与 MySQL 有区别。
请问此处是否有什么强需求吗?

mysql表中有字段为json类型,要求mysql 和tidb中得数据要一模一样



字符串得对000没有做处理,其他类型得有做处理