MySQL的十进制计算不一致

时间:2014-09-24 13:44:11

标签: mysql decimal precision consistency

我正在使用MySQL 服务器版本:5.6.20-1 + deb.sury.org~trusty + 1-log - (Ubuntu)并且无法进行十进制计算。这是我的理由:

我的桌子上有十进制字段DECIMAL(65, 24)。我需要它准确,因为它持有货币数据。我还保留了相同类型(DECIMAL(65, 24))的不同货币的转换率,因此我可以用其他货币给出相同的价格。这些比率通常很小,如0.000030769230769231000000

当我尝试汇总部分价格时出现问题,当且仅当我这样写时:

SELECT SUM(price * conversion_rate), COUNT(DISTINCT some_field)
FROM products
GROUP BY some_other_field

问题是结果不一致!我的意思是当我重新运行查询时,结果会发生变化!通常它在两种情况下发生变化,似乎是随机的。而且变化很大,例如Case1 - Case2 = $7,025.13! (当然这取决于价格和产品数量)。如果我省略DISTINCTCOUNT函数,问题就解决了。

MySQL说this about decimal data-type

  

DECIMAL和NUMERIC类型存储精确的数值数据值。这些   当保持精确精度很重要时,使用类型   货币数据的例子。

有谁知道如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

我为匆忙的问题道歉。有一个错误,但它与MySQL或小数无关。我已经在MySQL的控制台和MySQL Workbench中测试了我的场景,但没有一个显示任何不一致。所以我得出的结论是问题依赖于PhpMyAdmin(或者在PHP中),我测试了我的第一个场景。但是如果使用PhpMyAdmin,测试用例仍然有效,结果将从一次运行变为另一次运行(在上面解释的测试案例中)在这么辛苦的工作日之后让我感到惊讶,导致了一个匆忙的问题。

PhpMyAdmin的版本:4.2.7deb0.1

PHP的版本:5.5.16-1 + deb.sury.org~trusty + 1