【发布时间】:2011-02-03 18:38:41
【问题描述】:
我在 MySQL 数据库架构中引入浮点列时遇到了一个问题,即浮点值的比较并不总是返回正确的结果。
1 - 50.12
2 - 34.57
3 - 12.75
4 - ...(休息时间小于 12.00)
SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"
这返回“3”。
我读到 MySQL 中浮点值的比较是一个坏主意,而十进制类型是更好的选择。
我是否有希望继续使用浮点类型并使比较正常工作?
【问题讨论】:
-
SQL中双引号括起来的字面量有哪些?
-
不幸的是,MySQL 默认允许双引号像单引号一样工作。可以使用
ANSI_QUOTES选项关闭此功能,这将使它们根据 ANSI SQL 标准引用标识符(如上述查询中的非标准反引号)。 -
12.75 完全可以用二进制 (1100.11) 表示,所以我看不出它如何通过测试 "> 12.75"。您确定您的列表中没有其他点 > 12.75 吗?
标签: mysql comparison floating-point select-query