При выполнении некоторых простых тестов управление между типами данных выполняется правильно, несмотря на то, что написано в руководстве MySQL.
SELECT 0 IN ('0','00',0,00); -> TRUE
SELECT 0 IN ('0','01',1,01); -> TRUE
SELECT 0 IN ('1','00',1,10); -> TRUE
SELECT 0 IN ('11','10',0,10); -> TRUE
SELECT 0 IN ('1','01',1,00); -> TRUE
SELECT '0' IN ('1','01',1,00); -> TRUE
SELECT '0' IN ('0','00',0,00); -> TRUE
SELECT '0' IN ('0','01',1,01); -> TRUE
SELECT '0' IN ('1','00',1,10); -> FALSE
SELECT '0' IN ('11','10',0,10); -> TRUE
SELECT '1' IN ('11','10',1,10); -> TRUE
SELECT '15.32' IN ('11','10',1,15.32); -> TRUE
SELECT 13.12 IN ('11','10',1,13.12); -> TRUE
SELECT 00 IN ('11','00',1,13.12); -> TRUE
SELECT '00' IN ('11',00,1,13.12); -> TRUE
SELECT '00.0' IN ('11',00.0,1,13.12); -> TRUE
SELECT '00.00' IN ('11',0,1,13.12); -> TRUE
SELECT '00.01' IN ('11',0.01,1,13.12); -> TRUE
Вышеуказанные результаты можно увидеть в этом SQLFiddle
Но вышеприведенные тесты даже не близки к тестированию всех различных типов данных MySQL.
Кроме того, мы должны просто подумать, в каких случаях мы будем использовать IN ()
оператор.
MySQL пишет, что смешанные типы данных иногда дают неожиданные результаты, но опять же действительно ли необходимо иметь разные типы данных внутри IN ()
?
In короткий нет . Что будет сравниваться со значениями внутри скобок, так это столбец таблицы с указанным c типом данных.
Например, не кажется ли сравнение столбца TEXT
с IN ('Hello','World',13)
странным? Я знаю, что можно возразить, что в столбце с типом данных TEXT
могут быть числовые значения. Хорошо, тогда просто напишите выше, как это IN ('Hello','World','13')
, так как мы говорили о столбце TEXT
.
В случае, если мы не знаем тип данных или если каким-то образом тип данных является динамическим c и может несколько раз измениться, тогда мы должны преобразовать это поле в тип данных, который мы ожидаем, что большинство результатов будет.