为啥这个 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_xcoords_y 都是 TINYINT 字段,包含 [1, 100] 范围内的值。通常 mysql 不关心是否引用了数字.. 但显然在这种情况下它确实如此。问题是:为什么?

【问题讨论】:

永远不要依赖隐式类型转换。使用适合数据类型的文字。 【参考方案1】:

我对 MySql 的 inerds 有点生疏,但字符串上的 &lt;= 采用字典排序而不是数字排序,即 '150' &lt; '17'

【讨论】:

更改比较中的引号不会影响结果;这是由引用的“71”和“97”引起的。编辑我的问题。 根据我在my answer 中引用的Type Conversion in Expression Evaluation:“在所有其他情况下,参数都作为浮点(实)数进行比较。”【参考方案2】:

从字符串到浮点数的隐式转换可能导致结果不准确。见:Type Conversion in Expression Evaluation

【讨论】:

以上是关于为啥这个 SQL 查询中的单引号会影响计算?的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句id = '1' OR '1' = 1'单引号为啥不成对?

sql 如何查询单引号

为啥 Lisp 中的单引号总是返回大写?

SQL中的单引号转义符

SQL语言中的单引号与双引号区别

sql修改的数据存在单引号的问题