Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL';s十进制计算不一致_Mysql_Decimal_Precision_Consistency - Fatal编程技术网

MySQL';s十进制计算不一致

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

我使用的是MySQL服务器版本:5.6.20-1+deb.sury.org~trusty+1-log-(Ubuntu),十进制计算有问题。这是我的情况:

我有一个带有十进制字段的表
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版本。