- Вопрос или проблема
- Ответ или решение
- Решение проблемы: #1067 – Неверное значение по умолчанию для ‘post_date’ при восстановлении базы данных WordPress
- Причина ошибки
- Проверка текущих настроек sql_mode
- Изменение sql_mode
- Переопределение значений по умолчанию для полей даты
- Восстановление автоинкремента
- Другие рекомендации
- Заключение
Вопрос или проблема
Я восстановил свою базу данных WordPress из резервной копии sql. Однако при этом все таблицы потеряли автоинкремент.
Когда я пытаюсь вернуть его с помощью этого sql
ALTER TABLE `mercury_posts` CHANGE `ID` `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT;
Я получаю сообщение об ошибке #1067 - Неверное значение по умолчанию для 'post_date'
. Как мне это исправить?
Значение по умолчанию для post_date — 0000-00-00 00:00:00. Если вы проверите переменную sql_mode вот так:
show variables like 'sql_mode';
… это покажет вам переменную sql_mode, которая будет выглядеть примерно так: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Вам нужно заново настроить переменную sql_mode без
NO_ZERO_IN_DATE,NO_ZERO_DATE
Таким образом, в предыдущем примере вам следует установить sql_mode так:
SET sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Затем снова проверьте переменную sql_mode, чтобы убедиться, что она изменилась правильно:
show variables like 'sql_mode';
Тогда ограничение исчезнет ;D
Решение найдено здесь: https://stackoverflow.com/a/37696251/504910
Вы должны добавить этот код в начало вашего SQL
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00";
Вы можете использовать следующую команду для изменения значения по умолчанию вашего post_date:
ALTER TABLE `wp_posts`
CHANGE `post_date` `post_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
Я в конечном итоге решил эту проблему, удалив неисправную базу данных, сделав резервную копию снова из рабочей базы данных, но экспортировав структуру и данные отдельно.
Сначала выполните
ALTER TABLE `wp_posts`
CHANGE `post_date` `post_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_date_gmt` `post_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_modified` `post_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_modified_gmt` `post_modified_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
затем после автоинкремента
Ответ Карлоса Фарии идеален!
Но вот небольшой код, который вы можете использовать, если находитесь на PhpMyAdmin и не хотите нарушать конфигурацию SQL.
Здесь я поменяю значение sql_mode
, но только для сеанса, всего на время, необходимое для изменения таблицы:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE',''));
ALTER TABLE wp_posts auto_increment = XXX;
(Не забудьте изменить префикс таблицы wp_
и заменить XXX
на новое значение AI, которое вы хотите)
Изменение sql_mode на
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
работает, но это продолжается только до перезапуска sql сервера.
Так что, если вам это снова потребуется, вам нужно снова изменить sql_mode.
это правильный ответ и решение на вопрос:
https://gist.github.com/kaorukobo/718f4eb684ac01e1b65fc4cb69587fae
короче говоря: вы не можете изменить таблицу, потому что mysql обнаруживает ошибочное значение по умолчанию для поля post_date (и других также). так что просто адаптируйте запрос, чтобы решить эту проблему, после этого вы можете изменять таблицу как хотите.
Ответ или решение
Решение проблемы: #1067 – Неверное значение по умолчанию для ‘post_date’ при восстановлении базы данных WordPress
При восстановлении базы данных WordPress из резервной копии, часто могут возникнуть ошибки, связанные с неправильными значениями по умолчанию в таблицах, включая ошибку #1067 – Неверное значение по умолчанию для ‘post_date’. В данной статье мы рассмотрим, как устранить эту ошибку и восстановить функциональность базы данных.
Причина ошибки
Основной причиной появления ошибки #1067 является то, что значение по умолчанию для поля post_date
в таблице wp_posts
установлено в 0000-00-00 00:00:00
, что не является допустимым значением в некоторых режимах SQL, таких как NO_ZERO_IN_DATE
и NO_ZERO_DATE
.
После восстановления базы данных возможно, что режимы SQL по умолчанию изменились, и, как следствие, версии MySQL могут блокировать любые операции, которые имеют такое значение по умолчанию.
Проверка текущих настроек sql_mode
Для начала, проверим текущее значение переменной sql_mode:
SHOW VARIABLES LIKE 'sql_mode';
Если вы видите в списке значения NO_ZERO_IN_DATE
и NO_ZERO_DATE
, это указывает на необходимость их удаления, чтобы предотвратить ошибку при внесении изменений.
Изменение sql_mode
Самый простой способ временно изменить режим SQL для текущей сессии — выполнить следующую команду:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode, 'NO_ZERO_IN_DATE,NO_ZERO_DATE', ''));
Это позволит вам внести изменения в таблицы без возникновения ошибки.
Переопределение значений по умолчанию для полей даты
После изменения режима SQL вы можете изменить значения по умолчанию для полей даты в таблице wp_posts
. Используйте следующую команду для обновления поля post_date
, а также связанных с ним полей:
ALTER TABLE `wp_posts`
CHANGE `post_date` `post_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_date_gmt` `post_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_modified` `post_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CHANGE `post_modified_gmt` `post_modified_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
Восстановление автоинкремента
После того как вы установили корректные значения по умолчанию для полей даты, можно добавить автоинкремент к полю ID
:
ALTER TABLE `wp_posts` CHANGE `ID` `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT;
Другие рекомендации
Если вы все еще сталкиваетесь с ошибками, после выполнения изменений, вы можете выполнить:
-
Удалите и снова восстановите поврежденную базу данных, используя резервные копии. При этом рекомендуется экспортировать структуру и данные отдельно, чтобы избежать проблем с инкрементами и значениями по умолчанию.
-
Если вам необходимо частое изменение режимов SQL, рассмотрите возможность написания триггеров или автоматизации, чтобы обновлять настройки при каждом запуске.
Заключение
Ошибка #1067 – Неверное значение по умолчанию для ‘post_date’ в базе данных WordPress может быть легко устранена с помощью правильной настройки режимов SQL и обновления значений по умолчанию. Регулярное выполнение резервного копирования и проверки базы данных поможет избежать таких проблем в будущем. Если данная проблема все же возникнет, выполнение описанных выше шагов обеспечит успешное восстановление функциональности вашей базы данных.