2012-10-30 74 views
1

这是我注意到的一种奇怪的怪癖,我真的只是想看看是否有人能够提供洞察力,为什么会发生。用int查询字符串字段,返回等价的('int-%')

假设我们有一个叫做“账户”领域,这是一个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

回答

3

http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

” ...的MySQL自动将数字转换为字符串,反之亦然。“

+0

+1查看.. .simple那样 – fancyPants

+0

我明白mysql会自动转换,我更感兴趣的是LIKE语句,它似乎成为了暗示。 – Camway

+0

我们可以澄清一点吗? 1)你期望什么行为? 2)与你观察到的有什么不同? –

3

这是因为%是一个元字符,它表示任意数量的字符,包括零字符。 Like关键字查找以1234开头的模式。 由于account = 1234也与条件匹配,因此您会得到相同的结果。

1

我认为在这一点这已被发现为MYSQL的bug,我提交了一份bug报告编号67427如果有人有兴趣在获得更新我会引导您通过http://bugs.mysql.com/