Представим, что у вас есть таблица test
с целочисленным полем id
.
содержание этой таблицы:
+---------+ | | id | | +---------+ | | --- | | | | 210 | | +---------+
Запрос
select * from test where id = '210abc'
возвращает результат:
+---------+ | | id | | +---------+ | | --- | | | | 210 | | +---------+
Почему?
Если вы выполняете сравнение в MySQL между целым числом и строкой, строка преобразуется в целое число. Я думаю, это довольно странное поведение.
Я нашел способ избежать такого поведения, используя cast
select * from test where CAST(id AS CHAR) = '210abc'
этот код возвращает 0 результатов.
Некоторые интересные наблюдения:
select * from test where id = 'abc210'
возвращает 0 результатов;
select * from test where id = '2abc10'
возвращает 0 результатов.
Таким образом, только символы, добавленные в конец строки, обрезаются для преобразования в целое число.