3

这是代码

mysql> SELECT id FROM tbl WHERE id = '1h';
+----+
| id |
+----+
|  1 |
+----+
1 row in set

确实有一个 id 为 1 的字段(但不是 '1h')。
这是 MySQL 文档的摘录:http: //dev.mysql.com/doc/refman/5.1/en/type-conversion.html

mysql> SELECT 1 > '6x';
    -> 0
mysql> SELECT 7 > '6x';
    -> 1

所以这个错误被记录在案,可以这么说。问题是这种行为的原因是什么以及如何纠正它以使其不使用 char 符号转换字符串?我可以转换所有字段值,例如

mysql> SELECT id FROM tbl WHERE cast(`id`, BINARY) = '1h';

但我不太喜欢这个变种

4

2 回答 2

3

这不是错误。

解决方案不是使用您的条件的字符串值来查询数字列。

永远不要依赖隐式类型转换。

于 2012-07-06T16:11:40.563 回答
0

您的任何观察都不是错误。它们是依赖隐式类型转换的结果。

在所有示例中,您都需要 MySQL 将字符串转换为 int。如果您阅读您链接到的页面,您会看到 MySQL 遵循一些规则来实现这一点。因此

'1h' -> 1
'6x' -> 6
'x6' -> 0

所以,如果你遵守这些规则,你会没事的。

更好的是,只是不要将 MySQL 置于需要进行这些转换的位置。这种情况通常指向系统其他地方的某种逻辑错误。

于 2012-07-06T16:19:01.513 回答