Double类型的字段从mysql同步到tidb数据不一致

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】 centos7
  • TiDB 版本】 3.0.4
  • 磁盘型号
  • 集群节点分布
  • 数据量 & region 数量 & 副本数
  • 问题描述(我做了什么)】 从mysql通过syncer实时同步数据到tidb,用sync_diff_inspector做数据对比,发现有张表数据不一致,查看发现这个这张表有字段是double类型,字段如下: baidu_longitude double(30,20) DEFAULT NULL COMMENT ‘xxx’, mysql查询出来表数据如下: ±-------------------------+ | baidu_longitude | ±-------------------------+ | 116.63596000000000000000 | ±-------------------------+

tidb查询出来表的数据如下: | baidu_longitude | ±-------------------------+ | 116.63595999999999719421 | ±-------------------------+

  • 关键词】 mysql 版本 5.6.29-log MySQL Community Server (GPL)

感谢反馈,我这边经过验证,在tidb中对于double(30,20)类型字段直接插入116.63596000000000000000数据,查询出来结果是会变成116.63595999999999719421,这个已经反馈给研发,但是double浮点数本身就可能存在精度问题,所以对于数据精度要求比较高的字段建议使用decimal类型

double浮点数本身就可能存在精度问题,但是在mysql内部主从复制架构下,从库和主库是一致的,同步到tidb数据就不一致,这本身是一个问题,我们现在业务使用方式是写mysql,读tidb,改字段类型会导致同步中断,所以坐等开发反馈问题原因

研发那边已经确认问题,下个版本会 fix 该问题。