Установка strict mode для MySQL
При разработке приложения, которое работает с БД, необходимо по-максимуму обеспечить корректность работы с ней. Лучший способ обеспечить себе здоровый сон, когда ваше приложение работает на продакшене - включить строгий режим работы СУБД.
Конечно это не гарантирует 100-процентной уверенности, но поможет отловить некоторые неприятные ошибки. Итак, приведу краткое описание некоторых весьма полезных режимов:
- STRICT_TRANS_TABLES - запрещает вставку некорректных данных (например, слишком большое число или длинная строка)
- NO_ZERO_DATE - запрещает вставку дат с нулевым значением (например, 0000-00-00)
- NO_ZERO_IN_DATE - запрещает вставку дат, которые содержат в себе нулевые значения года, месяца и т.д (например, 2015-00-05).
Установка режима может осуществляться тремя способами:
-
Добавлением строки в файл конфигурации my.cnf (для unix) или my.ini (для windows)
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"
Рекомендую именно этот вариант.
-
Добавлением параметра к строке запуска сервера MySQL
--sql_mode="STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"
-
Установкой глобального значения через выполнение команды (работает до перезапуска сервера)
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE';
-
Установкой значения для сессии через выполнение команды (работает в текущей сессии)
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE';
Полный список режимов MySQL можно посмотреть в официальной документации.