单引号影响选择查询中的计算

时间:2011-03-02 11:24:11

标签: mysql

SELECT COUNT(*) FROM area
WHERE ROUND(SQRT(POWER(('71' - coords_x), 2) +
                 POWER(('97' - coords_y), 2))) <= 17

==> 51

SELECT COUNT(*) FROM area
WHERE ROUND(SQRT(POWER((71 - coords_x), 2) +
                 POWER((97 - coords_y), 2))) <= 17

==> 22

coords_x和coords_y都是包含范围[1,150]中的值的TINYINT字段。通常MySQL并不关心数字是否被引用..但显然它确实在这种情况下。

问题是:为什么?

1 个答案:

答案 0 :(得分:0)

MySQL 始终关心数据类型。会发生什么情况是您的代码依赖于自动类型转换并对字符串执行数学运算(可以包含数字或不包含数字)。这可能导致各种不可预测的结果:

SELECT POW('Hello', 'World') -- This returns 1

总结一下:您需要学习和使用MySQL提供的不同数据类型。否则,您的应用程序将永远不会进行可靠的计算。

<强>更新

还有一个提示:

  

TINYINT [(M)] [UNSIGNED] [ZEROFILL]

     

一个非常小的整数。签名范围   是-128到127.无符号范围是   0到255。

     

URL:   http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html

我希望您不要尝试将150存储在已签名的tinyint列中。