2010-09-13 5 views
2

У меня есть таблица с полем ID типа INT.Weird Выберите результат

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

SELECT * from mytable where id=94 

и

SELECT * from mytable where id='94' 

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

SELECT * from mytable where id='94dssdfdfgsdfg2' 

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

+0

Если бы это была головоломка, может случиться так, что все они не вернут никаких результатов. – recursive

ответ

4

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

+0

+1: Что он делает. – NotMe

1

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

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

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