Error "#1067 - Invalid default value for 'post_date'" al intentar restablecer AI después de la copia de seguridad

18 abr 2017, 17:10:25
Vistas: 32.5K
Votos: 7

He restaurado mi base de datos de WordPress desde una copia de seguridad SQL. Sin embargo, al hacerlo, todas las tablas han perdido el auto increment.

Cuando intento agregarlo de nuevo con este SQL:

ALTER TABLE `mercury_posts` CHANGE `ID` `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT;

Obtengo el error #1067 - Invalid default value for 'post_date'. ¿Cómo puedo solucionarlo?

1
Comentarios

Parece que tus tablas estaban configuradas como MyISAM en lugar de InnoDB

BenB BenB
29 abr 2018 04:49:27
Todas las respuestas a la pregunta 8
4
18

El valor predeterminado de post_date es 0000-00-00 00:00:00. Si verificas la variable sql_mode de esta manera:

show variables like 'sql_mode';

... te mostrará la variable sql_mode, que será algo como esto: 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

Debes configurar nuevamente la variable sql_mode sin NO_ZERO_IN_DATE,NO_ZERO_DATE

Así que en el ejemplo anterior deberías establecer sql_mode de esta forma:

SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Luego verifica nuevamente la variable sql_mode para asegurarte de que haya cambiado correctamente:

show variables like 'sql_mode';

¡Entonces la restricción desaparecerá! ;D

Encontré la solución aquí: https://stackoverflow.com/a/37696251/504910

1 sept 2018 11:55:40
Comentarios

Lo anterior agregó un AUTO_CREATE_USER incorrecto. El código correcto estaba en la URL vinculada (https://stackoverflow.com/a/37696251/504910) set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

popealope popealope
7 jul 2020 09:43:14

El código que escribí no incluye NO_ZERO_IN_DATE,NO_ZERO_DATE. La variable sql_mode original en mi sistema tenía NO_AUTO_CREATE_USER, así que la dejé así.

Carlos Faria Carlos Faria
10 jul 2020 19:24:29

El código proporcionado por @CarlosFaria no funciona para el problema descrito. Pero el código proporcionado por popealope funciona bien. Por lo tanto, prefiero corregir esto en la publicación.

STORM STORM
19 jun 2023 15:00:13

Consulta mi respuesta para una explicación de por qué ocurre esto https://wordpress.stackexchange.com/a/426561/157837

8ctopus 8ctopus
26 ago 2024 16:42:01
1
10

Debes agregar este código al inicio de tu SQL

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
11 feb 2020 18:07:56
Comentarios

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; esto lo resolvió para mí

tmarois tmarois
7 mar 2022 22:26:32
2

Puedes usar el siguiente comando para cambiar tu post_date predeterminado:

  ALTER TABLE `wp_posts` 
  CHANGE `post_date` `post_date`  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
17 ago 2021 19:04:23
Comentarios

Así es como WordPress debería crear nuevos esquemas.

Marcel Waldvogel Marcel Waldvogel
8 ago 2022 22:11:50

En realidad vas a desordenar tu base de datos haciendo eso, ya que definitivamente no es lo que WordPress hace.

8ctopus 8ctopus
26 ago 2024 15:49:51
0

Finalmente resolví esto eliminando la base de datos defectuosa, haciendo una nueva copia de seguridad desde la base de datos funcional pero exportando la estructura y los datos por separado.

19 abr 2017 17:29:38
1

Primera ejecución

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;

luego después del auto incremento

13 jul 2023 18:39:12
Comentarios

Tal como está redactada actualmente, tu respuesta no es clara. Por favor, [edita] para añadir detalles adicionales que ayuden a otros a entender cómo esto responde a la pregunta formulada. Puedes encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.

User User
13 jul 2023 21:27:55
0

La respuesta de Carlos Faria ¡es perfecta!

Pero aquí hay un pequeño código que puedes usar si estás en PhpMyAdmin y no quieres meterte con la configuración SQL.

Aquí voy a cambiar el valor de sql_mode pero solo para la sesión, solo el tiempo necesario para alterar la tabla:

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE',''));

ALTER TABLE wp_posts auto_increment = XXX;

(No olvides cambiar el prefijo de la tabla wp_ y reemplazar XXX por el nuevo valor AI que deseas)

17 ago 2023 12:18:41
0

Cambiar sql_mode a

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

funciona, pero solo dura hasta que reinicias el servidor SQL.

Así que en caso de que lo necesites nuevamente, tendrás que cambiar sql_mode otra vez.

22 may 2021 12:39:26
0
-1

esta es la respuesta y solución correcta a la pregunta: https://gist.github.com/kaorukobo/718f4eb684ac01e1b65fc4cb69587fae

en resumen: no puedes modificar la tabla, porque MySQL detecta un error de valor predeterminado para el campo post_date (y otros también). por lo tanto, solo adapta la consulta para resolver este problema, después de eso, puedes modificar la tabla como desees.

29 may 2024 13:02:22