这似乎是一个非常奇怪的问题,我似乎无法弄清楚原因。当运行 mysql select 语句时,我们一直没有返回任何结果,但只有当值达到带引号的“7.56”时才返回。如果我们运行不带引号或使用不同数字的相同查询,它将按预期工作。下面的示例查询和结果:
SELECT *
FROM `orders`
WHERE `itemsTotal` = '7.56'
LIMIT 0 , 30
MySQL 返回一个空结果集(即零行)。 (查询花费了 0.0334 秒)
SELECT *
FROM `orders`
WHERE `itemsTotal` = 7.56
LIMIT 0 , 30
Showing rows 0 - 0 ( 1 total, Query took 0.0297 sec)
现在,如果您将项目总数更改为 7.57:
SELECT *
FROM `orders`
WHERE `itemsTotal` = '7.57'
LIMIT 0 , 30
Showing rows 0 - 0 ( 1 total, Query took 0.0280 sec)
SELECT *
FROM `orders`
WHERE `itemsTotal` = 7.57
LIMIT 0 , 30
Showing rows 0 - 0 ( 1 total, Query took 0.0284 sec)
这是在本地主机上运行 mysql 5.5.24 进行测试,在实时环境中运行 mysql 5.0.95。从 PHP 文件和 phpmyadmin 运行此查询时会得到相同的结果。如果有人发现明显的错误,请告诉我!
最佳答案
您比较的问题是float precision 。由于 float 据类型近似表示值,因此在常见情况下不能依赖严格比较。这就是为什么您可以直接将值转换为字符串来获得结果,但如果您尝试比较 float 则不能获得结果。
因此,您的 7.56
表示为 7.55999999999
- 例如,无法通过严格比较作为 float 找到,但可以通过作为字符串比较找到。参见'float comparison'部分了解更多信息。
为了解决这个问题 - 通常的解决方案是涉及精度增量并将值与
SELECT *
FROM `orders`
WHERE ABS(`itemsTotal` - 7.56) < 1E-12
LIMIT 0 , 30
-这里 1E-12
是那个增量。
关于php - Mysql 选择查询错误 '7.56',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869988/