Когда строка сравнивается с числом, строка преобразуется в число. Итак, это:
SELECT '1,3,2' IN (1, 2) -- true
Вынудит MySQL преобразовать 1,3,2
в 1
; он анализирует 1 и игнорирует все после запятой. Вы можете подтвердить это поведение, переупорядочив значения, и оно больше не будет соответствовать:
SELECT '3,1,2' IN (1, 2) -- false
Решение hacki sh состоит в следующем:
WHERE CONCAT(',', code, ',') LIKE '%,1,%'
OR CONCAT(',', code, ',') LIKE '%,2,%'
Но правильное решение - хранить значения, разделенные запятыми, как отдельные строки.