"#1067 - Valore predefinito non valido per 'post_date'" durante il ripristino dell'AI dopo il backup

18 apr 2017, 17:10:25
Visualizzazioni: 32.5K
Voti: 7

Ho ripristinato il mio database WordPress da un backup SQL. Tuttavia, facendo ciò, tutte le tabelle hanno perso l'auto increment.

Quando provo ad aggiungerlo nuovamente con questo SQL

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

Ottengo l'errore #1067 - Valore predefinito non valido per 'post_date'. Come posso risolvere questo problema?

1
Commenti

Sembra che le tue tabelle siano state impostate su MyISAM invece che InnoDB

BenB BenB
29 apr 2018 04:49:27
Tutte le risposte alla domanda 8
4
18

Il valore predefinito di post_date è 0000-00-00 00:00:00. Se controlli la variabile sql_mode in questo modo:

show variables like 'sql_mode'; 

... ti mostrerà la variabile sql_mode, che sarà qualcosa come: 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

Devi riconfigurare la variabile sql_mode senza NO_ZERO_IN_DATE,NO_ZERO_DATE

Quindi nell'esempio precedente dovresti impostare sql_mode così:

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

Poi controlla nuovamente la variabile sql_mode per assicurarti che sia cambiata correttamente:

show variables like 'sql_mode';

A quel punto la restrizione sarà rimossa ;D

Ho trovato la soluzione qui: https://stackoverflow.com/a/37696251/504910

1 set 2018 11:55:40
Commenti

Il codice sopra aggiunto includeva un AUTO_CREATE_USER errato. Il codice corretto era nell'URL collegato (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 lug 2020 09:43:14

Il codice che ho scritto è senza NO_ZERO_IN_DATE,NO_ZERO_DATE. La variabile sql_mode originale nel mio sistema era con NO_AUTO_CREATE_USER quindi l'ho lasciata così.

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

Il codice fornito da @CarlosFaria non funziona per il problema descritto. Ma il codice fornito da popealope funziona bene. Pertanto preferisco correggerlo nel post.

STORM STORM
19 giu 2023 15:00:13

Vedi la mia risposta per una spiegazione sul perché ciò accade https://wordpress.stackexchange.com/a/426561/157837

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

Devi aggiungere questo codice all'inizio del tuo 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
Commenti

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; questo ha risolto il problema per me

tmarois tmarois
7 mar 2022 22:26:32
2

Puoi utilizzare il seguente comando per modificare il tuo post_date predefinito:

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

Questo dovrebbe essere il modo in cui WordPress crea nuovi schemi.

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

In realtà finirai per danneggiare il tuo database facendo così, perché WordPress sicuramente non funziona in questo modo.

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

Alla fine ho risolto eliminando il database difettoso, eseguendo nuovamente il backup dal database funzionante ma esportando separatamente la struttura e i dati.

19 apr 2017 17:29:38
1

Prima esecuzione

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;

poi dopo l'auto increment

13 lug 2023 18:39:12
Commenti

Nella forma attuale, la tua risposta non è chiara. Per favore [modificala] per aggiungere dettagli aggiuntivi che aiuteranno gli altri a comprendere come questa affronti la domanda posta. Puoi trovare maggiori informazioni su come scrivere buone risposte nel centro assistenza.

User User
13 lug 2023 21:27:55
0

La risposta di Carlos Faria è perfetta!

Ma ecco un piccolo codice che puoi usare se sei su PhpMyAdmin e non vuoi pasticciare con la configurazione SQL.

Qui modificherò il valore sql_mode ma solo per la sessione, giusto il tempo necessario per modificare la tabella:

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

ALTER TABLE wp_posts auto_increment = XXX;

(Non dimenticare di cambiare il prefisso della tabella wp_ e sostituire XXX con il nuovo valore AI che desideri)

17 ago 2023 12:18:41
0

Modificare sql_mode in

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

funziona, ma dura solo fino al riavvio del server sql.

Quindi, nel caso ti servisse nuovamente, dovrai cambiare di nuovo sql_mode.

22 mag 2021 12:39:26
0
-1

questa è la risposta corretta e la soluzione alla domanda: https://gist.github.com/kaorukobo/718f4eb684ac01e1b65fc4cb69587fae

in breve: non puoi modificare la tabella, perché MySQL rileva un valore predefinito errato per il campo post_date (e anche altri campi). quindi, basta adattare la query per risolvere questo problema, dopodiché puoi modificare la tabella come desideri.

29 mag 2024 13:02:22