这是代码
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
所以说,这个bug已被记录下来了。问题是这种行为的原因是什么以及如何纠正它以使这不是使用char符号的字符串?我可以投射所有字段值,如
mysql> SELECT id FROM tbl WHERE cast(`id`, BINARY) = '1h';
但我不太喜欢这个变种
答案 0 :(得分:3)
这不是错误。
解决方案不使用条件的字符串值查询数字列。
从不依赖隐式类型转换。
答案 1 :(得分:0)
您的观察结果都不是错误。它们是依赖隐式类型转换的结果。
在所有示例中,您都要求MySQL将字符串转换为int。如果您阅读了链接到的页面,您将看到MySQL遵循一些实现此目的的规则。结果
'1h' -> 1
'6x' -> 6
'x6' -> 0
所以,如果你遵循这些规则,你就可以了。
更好的是,不要让MySQL处于需要进行这些转换的位置。这种情况通常指向系统中其他地方的某种逻辑错误。