MySQL Where IN Clause returns 不同的结果

MySQL Where IN Clause returns different result

我是 MySQL 的新手,我想了解 IN 子句的工作原理。

在 MySQL 中,当我尝试这样使用 in 子句时:

Select *
From `table`
WHERE `code` IN (1,2)

有效并且returns记录

Select *
From `table`
WHERE `code` IN (3)

没用。

数据库中的列值:

-----------------
|    `code`     |
|    1,3,2      |
-----------------

说明: code VARCHAR(100)

当字符串与数字比较时,字符串被转换为数字。所以这个:

SELECT '1,3,2' IN (1, 2) -- true

会强制MySQL将1,3,2转换为1;它解析 1 并忽略逗号后的所有内容。您可以通过重新排列值来确认此行为,它将不再匹配:

SELECT '3,1,2' IN (1, 2) -- false

一个骇人听闻的解决方案是做这样的事情:

WHERE CONCAT(',', code, ',') LIKE '%,1,%'
   OR CONCAT(',', code, ',') LIKE '%,2,%'

但正确的解决方案是将逗号分隔值存储为单独的行。