简单的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。
有什么想法吗?
答案 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)。