为啥这个 SQL 查询中的单引号会影响计算?
Posted
技术标签:
【中文标题】为啥这个 SQL 查询中的单引号会影响计算?【英文标题】:Why do the single quotes in this SQL query affect the calculations?为什么这个 SQL 查询中的单引号会影响计算? 【发布时间】:2011-06-17 13:14:16 【问题描述】:SELECT COUNT(*) FROM planets
WHERE ROUND(SQRT(POWER(('71' - coords_x), 2) +
POWER(('97' - coords_y), 2))) <= 17
==> 51
SELECT COUNT(*) FROM planets
WHERE ROUND(SQRT(POWER((71 - coords_x), 2) +
POWER((97 - coords_y), 2))) <= 17
==> 22
coords_x
和 coords_y
都是 TINYINT 字段,包含 [1, 100] 范围内的值。通常 mysql 不关心是否引用了数字.. 但显然在这种情况下它确实如此。问题是:为什么?
【问题讨论】:
永远不要依赖隐式类型转换。使用适合数据类型的文字。 【参考方案1】:我对 MySql 的 inerds 有点生疏,但字符串上的 <=
采用字典排序而不是数字排序,即 '150' < '17'
。
【讨论】:
更改比较中的引号不会影响结果;这是由引用的“71”和“97”引起的。编辑我的问题。 根据我在my answer 中引用的Type Conversion in Expression Evaluation:“在所有其他情况下,参数都作为浮点(实)数进行比较。”【参考方案2】:从字符串到浮点数的隐式转换可能导致结果不准确。见:Type Conversion in Expression Evaluation
【讨论】:
以上是关于为啥这个 SQL 查询中的单引号会影响计算?的主要内容,如果未能解决你的问题,请参考以下文章