2

一个简单的 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。

有什么想法吗?

4

3 回答 3

3

您的数据库有 int 字段,它将截断字符并仅考虑数字,这就是为什么您将 23 作为返回 id 的原因。

于 2013-07-06T15:44:45.623 回答
0

正如 Fakhruddin 所说,该int字段会截断字符的值。这是正确的。STRICT_ALL_TABLES但是您可以通过设置模式来防止首先插入错误的值

mysql> SET sql_mode = 'STRICT_ALL_TABLES';

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

于 2013-07-06T16:04:06.230 回答
0

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

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

于 2013-07-06T16:00:42.993 回答