MySQL';s十进制计算不一致
我使用的是MySQL服务器版本:5.6.20-1+deb.sury.org~trusty+1-log-(Ubuntu),十进制计算有问题。这是我的情况: 我有一个带有十进制字段的表MySQL';s十进制计算不一致,mysql,decimal,precision,consistency,Mysql,Decimal,Precision,Consistency,我使用的是MySQL服务器版本:5.6.20-1+deb.sury.org~trusty+1-log-(Ubuntu),十进制计算有问题。这是我的情况: 我有一个带有十进制字段的表decimal(65,24)。我需要它精确,因为它包含货币数据。我还保留了同一类型不同货币的换算率(DECIMAL(65,24)),以便在其他货币中给出相同的价格。这些比率通常很小,比如0.00003076230769231000000 当我试图汇总一些价格时,问题就出现了,如果且仅当我这样写的话: SELECT SU
decimal(65,24)
。我需要它精确,因为它包含货币数据。我还保留了同一类型不同货币的换算率(DECIMAL(65,24)
),以便在其他货币中给出相同的价格。这些比率通常很小,比如0.00003076230769231000000
当我试图汇总一些价格时,问题就出现了,如果且仅当我这样写的话:
SELECT SUM(price * conversion_rate), COUNT(DISTINCT some_field)
FROM products
GROUP BY some_other_field
问题是结果不一致!我的意思是,当我重新运行查询时,结果会改变!通常在两种情况下会发生变化,而且似乎是随机的。而且变化是相当大的,例如,Case1-Case2=$7025.13
!(当然,这取决于价格和产品数量)。如果我省略了DISTINCT
或COUNT
函数,问题就解决了
MySQL说:
十进制和数字类型存储精确的数字数据值。这些
例如,当需要保持精确精度时,可以使用类型
以货币数据为例
有人知道如何克服这个问题吗?我为我仓促提出的问题道歉。有一个bug,但它与MySQL或小数无关。我已经在MySQL的控制台和MySQL工作台上测试了我的场景,没有一个显示出任何不一致性。因此,我的结论是,这个问题依赖于PhpMyAdmin(或者PHP),我在中测试了我的第一个场景。但是,如果您使用PhpMyAdmin,测试用例仍然有效,结果将从一次运行更改为另一次运行(在上面解释的测试用例中),这让我感到惊讶,因为经过了如此辛苦的工作一天后,出现了一个仓促的问题 PhpMyAdmin的版本:4.2.7deb0.1
PHP版本:5.5.16-1+deb.sury.org~trusty+1价格字段的数据类型是什么?两者都是
DECIMAL(65,24)
显示一些示例数据,以便我们可以尝试重新计算您的问题。我在想sum()可能返回不同的数据类型,从而舍入结果,但显然他们在5.0.5中修正了这个问题。@JGrice这实际上是一个很好的猜测,可能是正确的猜测,因为PO只提供了他的OS版本,而不是MySQL版本。