id
- это целое число, и вы сравниваете его со строкой '2,5,6'
.MySQL преобразует строку в число, чтобы сравнить их.
Ну, '2,5,6'
не число, и другие СУБД выдают ошибку.Но MySQL использует другой подход: он преобразует символ на символ, пока строка не закончится или символ не будет числовым.Таким образом, он видит 2, а затем запятую.В зависимости от ваших настроек запятая является десятичным разделителем или нет.Таким образом, MySQL либо преобразуется в 2, либо в 2,5.
Вот документация по неявным преобразованиям в MySQL: https://dev.mysql.com/doc/refman/5.5/en/type-conversion.html.
Алгоритм преобразования строки в число явно не описан.там, но они говорят, например,
есть много разных строк, которые могут преобразовать в значение 1, например, «1», «1» или «1a».
Они также указывают в этом документе, что неявное преобразование опасно, поскольку строки преобразуются не в DECIMAL
(как я бы подумал), а в приблизительный тип данных DOUBLE
.Так что в MySQL всегда следует избегать неявного преобразования строки в число .