2014-10-30 3 views
0

Я не знаю, является ли это ошибкой или что. У меня есть простая таблица MYSQL называется table с колонкой под названием id которая BIGINT UNSIGNED NOT NULLMYSQL возвращает результат, даже если неверное значение

У меня есть строка с идентификатором 1 и когда я запускаю этот запрос:

SELECT * FROM table WHERE id = '1dasfrf' 

И удивительно, что возвращает идентификатор строки 1 в результате ряд! Он не должен возвращать ничего, поскольку предоставляется недопустимое значение. Тип таблицы MYSQL - innoDB, если это необходимо

Итак, если вы поместите любое число без значения после значения строки, оно вернет эту строку. Это, конечно, со всеми значениями id не только 1

+0

Это становится еще хуже: 'создать таблицу Foo (ID VARCHAR (20)); вставить в значения foo ('1x'), ('xy'); удалить из foo, где id; –

ответ

1

Это не ошибка. Много «магии» происходит за кулисами. В этом случае, вы можете прочитать о преобразовании здесь: http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

Если вы не хотите, автоматическое преобразование типов вы можете использовать строгий режим: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict

+0

так есть ли решение для этого? –

+0

Обновлено с предложением. – msfoster

+0

Строгий режим не изменит поведение в вопросе. –