Странный выбор результата - PullRequest
2 голосов
/ 14 сентября 2010

У меня есть таблица с полем ID типа INT.

Я делаю некоторую проверку данных и заметил, что

SELECT * from mytable where id=94

и

SELECT * from mytable where id='94'

отлично работает, но если я использую

SELECT * from mytable where id='94dssdfdfgsdfg2'

это дало мне тот же результат! Как это возможно?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2010

было бы возможно, если бы внутренняя реализация функции строки MySql для функции int отбрасывала все символы строки после первого нечислового числа при ее синтаксическом анализе.

1 голос
/ 14 сентября 2010

То, что вы видели, называется «неявное преобразование данных».

Неявный, противоположный «явному», означает, что тип данных автоматически преобразуется в тип данных сравниваемого столбца, когда это возможно. В этом случае MYTABLE.id - это тип данных INTeger, поэтому MySQL преобразует сравниваемое значение в INT, если оно заключено в одинарные кавычки (строковый тип данных, в SQL).

Из-за преобразования данные усекаются в конце последнего числового символа после начала с крайней левой позиции в строке.

...