Hydee_zyp
(Hacker Guk Vo S16)
1
为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
报表查询
【概述】 场景 + 问题概述
一个表里的数据多次执行,结果不一致
CREATE TABLE test.test_no_same
(
stock_qty
double(16,4) DEFAULT ‘0.0000’ COMMENT ‘库存数量’,
reserved_qty
double(16,4) DEFAULT ‘0.0000’ COMMENT ‘预留数量’,
purchase_price
double(18,6) DEFAULT NULL COMMENT ‘进价’,
sale_price
double(16,6) NOT NULL COMMENT ‘零售价’
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
初步验证应该是double精度处理问题,字段类型改为decimal没有问题
【TiDB 版本】
5.7.25-TiDB-v5.1.0
【应用软件及版本】
Hydee_zyp
(Hacker Guk Vo S16)
4
您好,这个问题再哪个版本解决了吗?线上报表核对数据基本都会差1-2分钱,问题还是比较严重的
Hydee_zyp
(Hacker Guk Vo S16)
6
主要是现在表数据直接通过dm由mysql同步过来的。mysql里如果把所有double改为decimal工作量太大。
业务现在没有问题的,所有业务那边也不愿意去改
db_user
(Db User)
7
因为涉及到钱的还是建议decimal比较安全一点,如果实在不好改的话,这里想到两种解决办法
一,试着把tidb换成decimal,看同步是否还能成功(请问用什么同步的)
二、查询语句使用cast做显示转换
qizheng
(qizheng)
8
在 tidb 查询的时候数据有没有变化,直接在 mysql 中查询也会出现这种情况么
Hydee_zyp
(Hacker Guk Vo S16)
9
dm同步的。部分重要的SQL已经显示转换,是可以的,不过报表太多了,还有大部分没有改。还有些报表是组装的,没法手动调整
Hydee_zyp
(Hacker Guk Vo S16)
10
一直变,每次查询结果都不一样。mysql没有出现类似情况
qizheng
(qizheng)
13
create table test.test_no_same_bak like test_no_same;
insert into test_no_same_bak select * from test_no_same;
Hydee_zyp
(Hacker Guk Vo S16)
14
表挺多的,要实时更新,这种临时静态表适用我们的场景