„#1067 - Valoare implicită nevalidă pentru 'post_date'" la încercarea de resetare AI după backup

18 apr. 2017, 17:10:25
Vizualizări: 32.5K
Voturi: 7

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ă?

1
Comentarii

Se pare că tabelele tale au fost setate pe MyISAM în loc de InnoDB

BenB BenB
29 apr. 2018 04:49:27
Toate răspunsurile la întrebare 8
4
18

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

1 sept. 2018 11:55:40
Comentarii

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

popealope popealope
7 iul. 2020 09:43:14

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.

Carlos Faria Carlos Faria
10 iul. 2020 19:24:29

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.

STORM STORM
19 iun. 2023 15:00:13

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

8ctopus 8ctopus
26 aug. 2024 16:42:01
1
10

Trebuie să adăugați acest cod în partea de sus a interogării dumneavoastră 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
Comentarii

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; asta a rezolvat problema pentru mine

tmarois tmarois
7 mar. 2022 22:26:32
2

Puteți utiliza următoarea comandă pentru a schimba data implicită post_date:-

  ALTER TABLE `wp_posts` 
  CHANGE `post_date` `post_date`  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
17 aug. 2021 19:04:23
Comentarii

Așa ar trebui să creeze WordPress noile scheme.

Marcel Waldvogel Marcel Waldvogel
8 aug. 2022 22:11:50

De fapt, vei încurca baza de date făcând asta, deoarece cu siguranță nu așa funcționează WordPress.

8ctopus 8ctopus
26 aug. 2024 15:49:51
0

Am rezolvat în cele din urmă problema ștergând baza de date defectă, făcând o nouă copie de rezervă din baza de date funcțională, dar exportând structura și datele separat.

19 apr. 2017 17:29:38
1

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

13 iul. 2023 18:39:12
Comentarii

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

User User
13 iul. 2023 21:27:55
0

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)

17 aug. 2023 12:18:41
0

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.

22 mai 2021 12:39:26
0
-1

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ță.

29 mai 2024 13:02:22