“#1067 – Неверное значение по умолчанию для ‘post_date'” при попытке сбросить ИИ после резервного копирования

Вопрос или проблема

Я восстановил свою базу данных 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 и обновления значений по умолчанию. Регулярное выполнение резервного копирования и проверки базы данных поможет избежать таких проблем в будущем. Если данная проблема все же возникнет, выполнение описанных выше шагов обеспечит успешное восстановление функциональности вашей базы данных.

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

Капча загружается...