Fejlen er på grund af sql-tilstanden, som kan være streng tilstand ifølge den seneste MYSQL 5.7-dokumentation
MySQL-dokumentation 5.7 siger :
Strikt tilstand påvirker, om serveren tillader '0000-00-00' som en gyldig dato:Hvis streng tilstand ikke er aktiveret, er '0000-00-00' tilladt, og indsættelser giver ingen advarsel. Hvis streng tilstand er aktiveret, '0000- 00-00' er ikke tilladt, og indsættelser giver en fejl, medmindre der også er angivet IGNORE. For INSERT IGNORE og UPDATE IGNORE er '0000-00-00' tilladt, og indsættelser giver en advarsel.
For at kontrollere MYSQL-tilstand
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Deaktiverer STRICT_TRANS_TABLES-tilstand
Men for at tillade formatet 0000-00-00 00:00:00
du skal deaktivere STRICT_TRANS_TABLES-tilstand i mysql-konfigurationsfilen eller ved kommando
På kommando
SET sql_mode = '';
eller
SET GLOBAL sql_mode = '';
Brug af søgeordet GLOBAL
kræver super previliges, og det påvirker de operationer, som alle klienter forbinder fra det tidspunkt af
hvis ovenstående ikke virker, så gå til /etc/mysql/my.cnf
(i henhold til ubuntu) og kommenter STRICT_TRANS_TABLES
Hvis du vil indstille sql-tilstanden permanent ved serverstart, skal du også inkludere SET sql_mode=''
i my.cnf
på Linux eller MacOS. For Windows skal dette gøres i my.ini
fil.
Bemærk
Men streng tilstand er ikke aktiveret som standard i MYSQL 5.6. Derfor producerer den ikke fejlen i henhold til MYSQL 6-dokumentation som siger
MySQL tillader dig at gemme en "nul" værdi på '0000-00-00' som en "dummy-dato." Dette er i nogle tilfælde mere praktisk end at bruge NULL-værdier og bruger mindre data og indeksplads. For at afvise '0000-00-00' skal du aktivere NO_ZERO_DATE SQL-tilstand.
OPDATERING
Angående fejlspørgsmålet som sagt af @Dylan-Su:
Jeg tror ikke, at dette er fejlen, det er den måde, hvorpå MYSQL har udviklet sig over tid, på grund af hvilken nogle ting er ændret baseret på yderligere forbedring af produktet.
Men jeg har en anden relateret fejlrapport vedrørende NOW()
funktion
Datetime-feltet accepterer ikke standard NOW()
En anden nyttig bemærkning [se Automatisk initialisering og opdatering for TIMESTAMP og DATETIME ]
Fra og med MySQL 5.6.5 kan kolonnerne TIMESTAMP og DATETIME automatisk initialiseres og opdateres til den aktuelle dato og klokkeslæt (det vil sige det aktuelle tidsstempel). Før 5.6.5 gælder dette kun for TIMESTAMP, og for højst én TIMESTAMP-kolonne pr. tabel. De følgende noter beskriver først automatisk initialisering og opdatering for MySQL 5.6.5 og nyere, derefter forskellene for versioner før 5.6.5.
Opdatering vedrørende NO_ZERO_DATE
Fra og med MySQL fra 5.7.4 er denne tilstand forældet. For tidligere version skal du kommentere den respektive linje i konfigurationsfilen. Se MySQL 5.7-dokumentation den NO_ZERO_DATE