Der Fehler ist auf den SQL-Modus zurückzuführen, der gemäß der neuesten MYSQL 5.7-Dokumentation ein strikter Modus sein kann
In der MySQL-Dokumentation 5.7 heißt es :
Der strikte Modus beeinflusst, ob der Server '0000-00-00' als gültiges Datum zulässt: Wenn der strikte Modus nicht aktiviert ist, ist '0000-00-00' zulässig und Einfügungen geben keine Warnung aus. Wenn der strikte Modus aktiviert ist, ist '0000-00-00' nicht zulässig und Einfügungen erzeugen einen Fehler, es sei denn, IGNORE ist ebenfalls angegeben. Für INSERT IGNORE und UPDATE IGNORE ist '0000-00-00' zulässig und Einfügungen erzeugen eine Warnung.
So überprüfen Sie den MYSQL-Modus
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Deaktivieren des STRICT_TRANS_TABLES-Modus
Um das Format zuzulassen, müssen 0000-00-00 00:00:00
Sie jedoch den STRICT_TRANS_TABLES-Modus in der MySQL-Konfigurationsdatei oder per Befehl deaktivieren
Auf Befehl
SET sql_mode = '';
oder
SET GLOBAL sql_mode = '';
Die Verwendung des Schlüsselworts GLOBAL
erfordert hervorragende Vorkenntnisse und wirkt sich auf die Vorgänge aus, die alle Clients ab diesem Zeitpunkt verbinden
Wenn oben nicht funktioniert, gehen Sie zu /etc/mysql/my.cnf
(gemäß Ubuntu) und kommentieren Sie ausSTRICT_TRANS_TABLES
Auch, wenn Sie wollen , um den SQL - Modus beim Start des Servers fest eingestellt ist dann SET sql_mode=''
in my.cnf
unter Linux oder MacOS. Für Windows muss dies in einer my.ini
Datei erfolgen.
Hinweis
Der strikte Modus ist in MYSQL 5.6 jedoch standardmäßig nicht aktiviert. Daher produziert sie nicht den Fehler pro Dokumentation MYSQL 6 , die besagt ,
Mit MySQL können Sie den Wert "0000-00-00" als "Dummy-Datum" speichern. Dies ist in einigen Fällen bequemer als die Verwendung von NULL-Werten und benötigt weniger Daten und Indexraum. Aktivieren Sie den SQL-Modus NO_ZERO_DATE, um '0000-00-00' nicht zuzulassen.
AKTUALISIEREN
In Bezug auf die Bug-Angelegenheit, wie von @ Dylan-Su gesagt:
Ich denke nicht, dass dies der Fehler ist, wie sich MYSQL im Laufe der Zeit entwickelt hat, aufgrund dessen einige Dinge aufgrund weiterer Verbesserungen des Produkts geändert werden.
Ich habe jedoch einen anderen verwandten Fehlerbericht bezüglich der NOW()
Funktion
Das Datum / Uhrzeit-Feld akzeptiert keine Standard-JETZT ()
Ein weiterer nützlicher Hinweis [siehe Automatische Initialisierung und Aktualisierung für TIMESTAMP und DATETIME ]
Ab MySQL 5.6.5 können die Spalten TIMESTAMP und DATETIME automatisch initialisiert und auf das aktuelle Datum und die aktuelle Uhrzeit (dh den aktuellen Zeitstempel) aktualisiert werden. Vor 5.6.5 gilt dies nur für TIMESTAMP und höchstens für eine TIMESTAMP-Spalte pro Tabelle. In den folgenden Hinweisen werden zunächst die automatische Initialisierung und Aktualisierung für MySQL 5.6.5 und höher sowie die Unterschiede für Versionen vor 5.6.5 beschrieben.
Update bezüglich NO_ZERO_DATE
Ab MySQL ab 5.7.4 ist dieser Modus veraltet. Für die vorherige Version müssen Sie die entsprechende Zeile in der Konfigurationsdatei auskommentieren. Weitere Informationen finden Sie in der MySQL 5.7-Dokumentation zu NO_ZERO_DATE
NULL
.