MySQL精确匹配就像LIKE一样

时间:2013-07-06 15:40:26

标签: mysql

简单的MySQL查询有一个有趣的问题。我正在尝试在id字段上进行完全匹配。

SELECT id
FROM tablename
WHERE id = '23'

返回

id: 23

在我这样做之前一切都很好:

SELECT id
FROM repairs
WHERE id = '23abcd'

返回

id: 23

为什么它会这样做?! id字段为int(10),数据库为MyISAM utf8_general_ci。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

你的数据库有int字段,它会截断字符,只考虑你得到23作为返回id的数字。

答案 1 :(得分:0)

您在查询中引用了数字,因此MySQL必须将其从字符串转换为数字。当它这样做时,它只使用字符串的数字部分。

我不认为这种行为是完全合适的(“23abcd”.ToInt()应该是NULL,我认为),但这就是它的作用。

答案 2 :(得分:0)

正如Fakhruddin所说,int字段会截断字符的值。那就对了。但是,您可以通过设置STRICT_ALL_TABLES模式

来防止首先插入错误的值
mysql> SET sql_mode = 'STRICT_ALL_TABLES';

还有一件事是,如果它们包含字母,则需要将您的id存储为字符串(VARCHAR)。