1

这是我注意到的一种奇怪的怪癖,我真的只是想看看是否有人可以提供有关其发生原因的见解。

假设我们有一个名为“account”的字段,它是一个 varchar(x)

这两个查询将返回相同的结果集。

SELECT * FROM table WHERE account = 1234;
SELECT * FROM table WHERE account LIKE '1234%';

我在为迁移一些旧数据而编写的脚本中偶然发现了这一点,但我不小心忘记了封装我的字符串。

谁能告诉我为什么会发生这种行为?


更新:

我觉得我可能没有很好地解释这一点,所以我将提供一个示例表:

table_name: 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不一样

4

3 回答 3

3

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

于 2012-10-30T17:05:54.643 回答
3

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

“...MySQL 会根据需要自动将数字转换为字符串,反之亦然。”

于 2012-10-30T17:05:02.590 回答
1

我认为此时已发现这是一个 MYSQL 错误,我提交了错误报告 ID #67427,如果有人有兴趣获得更新,我会指导您通过http://bugs.mysql.com/查看它

于 2012-10-30T20:22:39.503 回答