Решено — DEFAULT CURRENT_TIMESTAMP / NOW() для типа DATETIME.

При импорте одной базы у меня начала выскакивать ошибка

ERROR 1067 (42000) at line 1623: Invalid default value for 'date_added'

а сама проблемная строка в дампе имела такой вид

`date_added` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'дата добавления страницы',

Оказалось, что такой вариант записи подходит для MySQL 5.6 и выше, а у меня на сервере оказалась древняя MySQL 5.1. (sic).

Решить эту проблему можно двумя способами.

Способ №1 — сменить тип поля DATETIME на TIMESTAMP

При таком варианте, запись

`date_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'дата добавления страницы',

становится православной и дамп импортируется корректно, однако TIMESTAMP отличается от DATETIME тем, что зависит от временной зоны (более подробные отличия тут
— https://habr.com/post/61391/) и новость выложенная условно в 2 часа ночи становится немного странной, поэтому

Способ №2 — добавить триггер при создании записи

Но перед добавлением самого триггера, в моем случае нужно было поставить какое-нибудь дефолтное значение для поля, потому что на 0 MySql сыпал варнингами, поэтому я поставил вот так «2018-01-10 16:35:38» — дата на самом деле не важна, главное чтоб она была :), а затем прописал такой триггер

drop trigger if exists `ocpm_information_date_added_created`; -- удаляем если он есть
create trigger `ocpm_information_date_added_created` before insert -- создаем на событие before insert
    on `ocpm_information` -- имя таблицы
    for each row 
    set new.`date_added` = now();  -- имя поля

и все заработало.

Добавить комментарий

Ваш e-mail не будет опубликован.