Strange casting behavior in mysql

两盒软妹~` 提交于 2019-12-10 20:37:17

问题


Here is the code

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

There is indeed a field with id 1 (but not '1h').
Here is an extraction from MySQL docs: http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

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

So this bug is documented, so to say. The question is what's the reason for such behavior and how to correct it to make this not cast strings with char symbols? I can cast all field values like

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

but i don't like this variant too much


回答1:


This is not a bug.

The solution is not to query on numeric columns using a string value for your condition.

Never rely on implicit type casting.




回答2:


None of your observations are bugs. They are the result of relying in implicit type casting.

In all of your examples, you're requiring MySQL to convert a string to an int. If you read the very page that you linked to, you will see that MySQL follows some rules in achieving this. As a result

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

So, if you follow these rules, you'll be OK.

Better still, just don't put MySQL in a position where it needs to be doing these conversion. Such situations usually point to some kind of logic bug elsewhere in the system.



来源:https://stackoverflow.com/questions/11365824/strange-casting-behavior-in-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!