Появляется, если поле типа datetime уже содержит подобные нулевые значения при попытке изменить как тип поля (через alter table), так и сами значения в таблице.
Вероятно ошибка возникает, если вы импортировали данные в вашу базу. Скорее всего из-за не совпадения настроек баз данных, а именно отличия режимов, задаваемых в глобальной переменной sql_mode.
Подробнее о режимах можно почитать тут — https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
Сообщение ‘Incorrect datetime value’ вызывается режимами NO_ZERO_IN_DATE, NO_ZERO_DATE, отключите их и также ERROR_FOR_DIVISION_BY_ZERO. MySQL перестанет обращать внимание на ‘нулевые’ даты.
Для начала проверьте, какие настройки у вас активны:
1 |
SELECT @@sql_mode; |
Удалите значения режимов, связанных с нулевой датой. И задайте новое значение переменной sql_mode.
Помните, что если вы сделаете просто SET, то настройка будет действовать в рамках транзакции. Вам скорее всего потребуется установить значение для сессии или перманентно (глобально):
1 2 |
SET GLOBAL sql_mode = ''; SET SESSION sql_mode = ''; |
Но это также временные меры, после перезапуска mysql сервера, настройки вернутся к начальным. Для постоянного изменения нужно добавить значение для sql_mode в файл /etc/mysql/my.cnf:
1 2 |
[mysqld] sql_mode = "ONLY_FULL_GROUP_BY" |
У меня из всего перечня, к примеру, осталась только директива для группировки.