Der Fehler ist auf den SQL-Modus zurückzuführen, der gemäß der neuesten MYSQL 5.7-Dokumentation ein strikter Modus sein kann
MySQL-Dokumentation 5.7 sagt :
Der strenge Modus beeinflusst, ob der Server „0000-00-00“ als gültiges Datum zulässt:Wenn der strenge Modus nicht aktiviert ist, ist „0000-00-00“ zulässig und Einfügungen erzeugen keine Warnung. Wenn der strenge Modus aktiviert ist, wird „0000- 00-00' ist nicht erlaubt und Einfügungen erzeugen einen Fehler, es sei denn, es wird auch IGNORE angegeben. Für INSERT IGNORE und UPDATE IGNORE ist '0000-00-00' erlaubt und Einfügungen erzeugen eine Warnung.
So prüfen Sie den MYSQL-Modus
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
STRICT_TRANS_TABLES-Modus deaktivieren
Um jedoch das Format 0000-00-00 00:00:00
zuzulassen Sie müssen den STRICT_TRANS_TABLES-Modus in der MySQL-Konfigurationsdatei oder per Befehl deaktivieren
Auf Befehl
SET sql_mode = '';
oder
SET GLOBAL sql_mode = '';
Verwenden Sie das Schlüsselwort GLOBAL
erfordert Super-Privilegien und wirkt sich auf die Vorgänge aus, mit denen sich alle Clients ab diesem Zeitpunkt verbinden
Wenn oben nicht funktioniert, gehen Sie zu /etc/mysql/my.cnf
(wie pro Ubuntu) und kommentieren Sie STRICT_TRANS_TABLES
aus
Wenn Sie den SQL-Modus beim Serverstart dauerhaft festlegen möchten, schließen Sie außerdem SET sql_mode=''
ein in my.cnf
auf Linux oder MacOS. Für Windows muss dies in my.ini
erfolgen Datei.
Hinweis
Der strikte Modus ist jedoch in MYSQL 5.6 standardmäßig nicht aktiviert. Daher erzeugt es nicht den Fehler gemäß MYSQL 6-Dokumentation was sagt
MySQL erlaubt Ihnen, einen „Null“-Wert von „0000-00-00“ als „Dummy-Datum“ zu speichern. Dies ist in einigen Fällen bequemer als die Verwendung von NULL-Werten und verbraucht weniger Daten- und Indexspeicherplatz. Um „0000-00-00“ zu verbieten, aktivieren Sie den SQL-Modus NO_ZERO_DATE.
AKTUALISIEREN
In Bezug auf die Fehlerangelegenheit, wie von @Dylan-Su gesagt:
Ich glaube nicht, dass dies der Fehler ist, da sich MYSQL im Laufe der Zeit weiterentwickelt hat, aufgrund dessen einige Dinge aufgrund weiterer Verbesserungen des Produkts geändert wurden.
Ich habe jedoch einen anderen verwandten Fehlerbericht bezüglich NOW()
Funktion
Datetime-Feld akzeptiert JETZT keine Standardeinstellung ()
Noch ein nützlicher Hinweis [siehe Automatische Initialisierung und Aktualisierung für TIMESTAMP und DATETIME ]
Ab MySQL 5.6.5 können TIMESTAMP- und DATETIME-Spalten automatisch initialisiert und auf das aktuelle Datum und die aktuelle Uhrzeit (d. h. den aktuellen Zeitstempel) aktualisiert werden. Vor 5.6.5 gilt dies nur für TIMESTAMP und für höchstens eine TIMESTAMP-Spalte pro Tabelle. Die folgenden Hinweise beschreiben zuerst die automatische Initialisierung und Aktualisierung für MySQL 5.6.5 und höher, dann die Unterschiede für Versionen vor 5.6.5.
Aktualisierung bezüglich NO_ZERO_DATE
Ab MySQL 5.7.4 ist dieser Modus veraltet. Für frühere Versionen müssen Sie die entsprechende Zeile in der Konfigurationsdatei auskommentieren. Siehe MySQL 5.7-Dokumentation zum NO_ZERO_DATE