"#1067 - Valore predefinito non valido per 'post_date'" durante il ripristino dell'AI dopo il backup
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?

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

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';

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ì.

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

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

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

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.

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)

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.

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.
