Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehler in MySQL beim Festlegen des Standardwerts für DATE oder DATETIME

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