„#1067 - Valoare implicită nevalidă pentru 'post_date'" la încercarea de resetare AI după backup
Am restaurat baza de date WordPress dintr-un backup SQL. Cu toate acestea, făcând acest lucru, toate tabelele au pierdut auto increment.
Când încerc să îl adaug înapoi cu acest SQL
ALTER TABLE `mercury_posts` CHANGE `ID` `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT;
Primesc eroarea #1067 - Valoare implicită nevalidă pentru 'post_date'
. Cum pot remedia această problemă?

Valoarea implicită a post_date este 0000-00-00 00:00:00. Dacă verifici variabila sql_mode astfel:
show variables like 'sql_mode';
... aceasta va afișa variabila sql_mode, care va arăta cam așa: 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
Trebuie să configurezi din nou variabila sql_mode fără NO_ZERO_IN_DATE,NO_ZERO_DATE
Deci, în exemplul anterior, ar trebui să setezi sql_mode astfel:
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Apoi verifică din nou variabila sql_mode pentru a te asigura că s-a schimbat corect:
show variables like 'sql_mode';
Și restricția va dispărea ;D
Am găsit soluția aici: https://stackoverflow.com/a/37696251/504910

Codul de mai sus a adăugat un AUTO_CREATE_USER incorect. Codul corect era în URL-ul legat (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';

Codul pe care l-am scris este fără NO_ZERO_IN_DATE,NO_ZERO_DATE. Variabila sql_mode originală din sistemul meu conținea NO_AUTO_CREATE_USER, așa că am lăsat-o așa.

Codul furnizat de @CarlosFaria nu funcționează pentru problema descrisă. Dar codul furnizat de popealope
funcționează corect. Prin urmare, prefer să corectez acest lucru în postare.

Vezi răspunsul meu pentru o explicație de ce apare această problemă https://wordpress.stackexchange.com/a/426561/157837

Prima rulare
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;
apoi după auto increment

În forma sa actuală, răspunsul tău este neclar. Te rugăm să [editezi] pentru a adăuga detalii suplimentare care să ajute alții să înțeleagă cum acest răspuns abordează întrebarea pusă. Poți găsi mai multe informații despre cum să scrii răspunsuri bune în centrul de ajutor.

Răspunsul lui Carlos Faria este perfect!
Dar iată un mic cod pe care îl puteți folosi dacă vă aflați în PhpMyAdmin și nu doriți să vă încurcați cu configurația SQL.
Aici voi schimba valoarea sql_mode
dar doar pentru sesiune, doar timpul necesar pentru a modifica tabela:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE',''));
ALTER TABLE wp_posts auto_increment = XXX;
(Nu uitați să schimbați prefixul tabelului wp_
și să înlocuiți XXX
cu noua valoare AI pe care o doriți)

Modificarea sql_mode în
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
funcționează, dar efectul durează doar până la repornirea serverului SQL.
Deci, în caz că aveți nevoie din nou, va trebui să modificați din nou sql_mode.

acesta este răspunsul și soluția corectă la întrebare: https://gist.github.com/kaorukobo/718f4eb684ac01e1b65fc4cb69587fae
pe scurt: nu poți modifica tabelul, deoarece MySQL detectează o valoare implicită eronată pentru câmpul post_date (și altele). așadar, pur și simplu adaptează interogarea pentru a rezolva această problemă, după care poți modifica tabelul după dorință.
