Я был очень удивлен, когда MySQL разрешил мне вставить NULL
в поле, созданное с помощью NOT NULL
. Я провел некоторое исследование и обнаружил, как включить строгий режим. Тем не менее, я не совсем уверен, какая проверка MySQL делает, когда STRICT_ALL_TABLES
включен.
В руководстве написано:
Строгий режим определяет, как MySQL обрабатывает недопустимые или отсутствующие входные значения. Значение может быть недопустимым по нескольким причинам. (выделение мое) Например, у него может быть неправильный тип данных для столбца, или он может быть вне допустимого диапазона.
Я понимаю, что он считает отсутствующим, и как он справляется с этим. Я не понимаю, что он считает недействительным. Я провел некоторое тестирование и обнаружил следующее:
- Строки
- которые слишком длинны, недействительны.
- недопустимые номера
-
NULL
для столбца неNULL
недействительны -
TRUE
иFALSE
всегда кажутся действительными (они становятся равными 1 и 0 соответственно) - неверные даты недействительны
- нулевые даты действительны (для изменения этого поведения могут быть разрешены дополнительные режимы)
- float в целочисленном поле действительны (они округляются)
- буквы в поле числа недействительны
Выполняет ли MySQL другие проверки валидации, отличные от того, что упоминалось выше?
В руководстве написано "неправильный тип данных для столбца", но единственная ситуация, когда я вижу, что это фактически входит в игру, - это буквы в поле чисел. Существуют ли другие примеры ошибок типа данных?
Есть ли список где-то точно, какие проверки MySQL выполняет?
РЕДАКТИРОВАТЬ:. Для записи мое приложение уже проводит обширную проверку. Я использую строгий режим как последний шанс, только в случае проверки. Если я забуду что-то проверить, я хочу, чтобы он быстро сработал, а не "молчал какими-то моими данными".