这是我注意到的一种奇怪的怪癖,我真的只是想知道是否有人可以提供有关其发生原因的见解。
假设我们有一个名为“account”的字段,它是一个varchar(x)
这两个查询将返回相同的结果集。
SELECT * FROM table WHERE account = 1234;
SELECT * FROM table WHERE account LIKE '1234%';
我偶然在一个脚本中偶然发现了这个问题,我写这个脚本是为了迁移一些旧的数据而我不小心忘记了封装我的字符串。
有谁能告诉我为什么会出现这种情况?
更新
我觉得我可能没有这么好解释,所以我打算提供一个样本表:
表名: id - INT 帐户 - varChar(50)
输入:
ID - account
1 - "1"
2 - "12"
3 - "123"
4 - "1234"
这样:
1
SELECT * FROM table_name WHERE account LIKE '1%'
将返回条目1,2,3,4
2
SELECT * FROM table_name WHERE account = 1
将返回条目1,2,3,4
第3:
SELECT * FROM table_name WHERE account = '1'
将返回条目1
为什么1与2相同,为什么2与3
不同答案 0 :(得分:3)
http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html
“...... MySQL会根据需要自动将数字转换为字符串,反之亦然。”
答案 1 :(得分:3)
这是因为%是一个元字符,表示任意数量的字符,包括零个字符。 Like
关键字查找以1234开头的模式。
由于account = 1234也符合条件,因此您会得到相同的结果。
答案 2 :(得分:1)
我认为此时已被发现为MYSQL错误,我提交了错误报告ID#67427如果有人有兴趣获取更新,我会指示您通过http://bugs.mysql.com/
查看