【 使用环境 】测试环境
【 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,两个字段类型不兼容的。
热海
#9
不是bug,json更新四舍五入,是为了兼容mysql,mysql就是这样处理的。不需要四舍五入的话,建议不使用json字段
但是,我们源端就是mysql~数据比对不一致,我们才细看的。
热海
#11
mysql什么版本呀?麻烦贴一下mysql的结果。

OMS比对结果:
主要原因是,oms这边比对的数据蛮多不一致。不过,我现在这边清楚只是小数点精度的问题,业务端这边能接受,而且也只是影响精度后8位以上的数据,也不影响最后的结果。
谢谢了。
1 个赞
热海
#13
确认了一下,目前和mysql 8.0还在提高兼容性中,这个问题内部已经记录了,后续会修复这个场景,感谢你的反馈