一个简单的 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。
有什么想法吗?
一个简单的 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。
有什么想法吗?
您的数据库有 int 字段,它将截断字符并仅考虑数字,这就是为什么您将 23 作为返回 id 的原因。
正如 Fakhruddin 所说,该int
字段会截断字符的值。这是正确的。STRICT_ALL_TABLES
但是您可以通过设置模式来防止首先插入错误的值
mysql> SET sql_mode = 'STRICT_ALL_TABLES';
另一件事是,如果您的 id 包含字母,则需要将它们存储为字符串(VARCHAR)。
您在查询中引用了数字,因此 MySQL 必须将其从字符串转换为数字。当它这样做时,它只使用字符串的数字部分。
我认为这种行为并不完全合适(我认为“23abcd”.ToInt() 应该为 NULL),但这就是它的作用。