json字段出现数据不一致的情况

【 使用环境 】测试环境
【 OB or 其他组件 】ob
【 使用版本 】4.3.0
【问题描述】json字段出现数据不一致的情况,更新 update bak_bfip_cbhs_qc set cbx_jc_cost_ = ‘{“CG”: 122171.31730496179, “CL”: 0, “RG”: 0, “ZZ”: 0, “QT_XS”: 0}’ WHERE id_ = 691596459147026794; 得到的结果确实,cbx_jc_cost_ = {“CG”: 122171.3173049618, “CL”: 0, “RG”: 0, “ZZ”: 0, “QT_XS”: 0}。
【复现路径】
1、表结构字段类型,json
CREATE TABLE bak_test (
id_ bigint(20) NOT NULL COMMENT ‘无业务意义ID’,
cbx_qc_cost_ json DEFAULT NULL COMMENT ‘test’,
PRIMARY KEY (id_)
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ ;

2、插入数据:
insert into bak_test values(691596459147026794, ‘{“CG”: 122171.31730496179, “CL”: 0, “RG”: 0, “ZZ”: 0, “QT_XS”: 0}’);

3、查询结果:

数据明显不一致,但是,将 json类型调整为text类型,不会出现类似情况。

1 个赞

是否ob目前对json的支持还不够完善,需要将原来数据库的包括json的字段类型全部转为 text呢?

感谢。

稍等我确认一下

这个是我们这边遇到的问题,因为数据不一致这个问题我们这边认为比较严重的bug。而且,我们发现也不能直接从json转text,两个字段类型不兼容的。

看着是无法处理精度太高的数据。

不是bug,json更新四舍五入,是为了兼容mysql,mysql就是这样处理的。不需要四舍五入的话,建议不使用json字段

但是,我们源端就是mysql~数据比对不一致,我们才细看的。

mysql什么版本呀?麻烦贴一下mysql的结果。

image

OMS比对结果:

主要原因是,oms这边比对的数据蛮多不一致。不过,我现在这边清楚只是小数点精度的问题,业务端这边能接受,而且也只是影响精度后8位以上的数据,也不影响最后的结果。

谢谢了。

1 个赞

确认了一下,目前和mysql 8.0还在提高兼容性中,这个问题内部已经记录了,后续会修复这个场景,感谢你的反馈