среда, 6 апреля 2016 г.

Режим mysql 5.6/5.7, после обновления с 5.5 (sql-mode)

На сервере стоял mysql 5.5 (Debian 8), но в этой версии есть ограничение на дефолтные значения TIMESTAMP, оно было снято в mysql 5.6.5

В 5.5 выдавало ошибку:
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

А вот выдержка из документации
Changes in MySQL 5.6.5 (2012-04-10, Milestone 8)

Previously, at most one TIMESTAMP column per table could be automatically initialized or updated to the current date and time. This restriction has been lifted. Any TIMESTAMP column definition can have any combination of DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP clauses. In addition, these clauses now can be used with DATETIME column definitions. For more information, see Automatic Initialization and Updating for TIMESTAMP and DATETIME.

 Если уж обновлять mysql, то сразу до 5.7, но на хостинге много стареньких сайтиков, перепиливать их все не хотелось, к тому же проблему нужно было решить прямо сейчас, после обновления до 5.6/5.7, mysql более строго относится к вводимым данным, например нельзя добавить запись без указания значения того поля, где не задано значение по умолчанию:
Field XXX doesn't have a default value

А еще нельзя передать пустую строку в поля, где тип float/integer:
Incorrect integer value ” for column XXX at row M



Для того, чтобы mysql молча съедал все эти запросы и корректно работали сайты - нужно прописать в my.ini в секцию [mysqld]:
sql-mode=""


Но на DEV-сервере лучше оттачивать движок без таких параметров, чтобы сразу видеть все недочеты базы и работы с ней.