Als ich versuchte, die Tabelle zu ändern, zeigte es den Fehler:
ERROR 1067 (42000): Invalid default value for 'created_at'
Ich habe nach diesem Fehler gegoogelt, aber alles, was ich gefunden habe, war, als ob sie versucht hätten, den Zeitstempel so zu ändern, dass er auftrat. Hier versuche ich jedoch, eine neue Spalte hinzuzufügen, und es wird folgende Fehlermeldung angezeigt:
mysql> ALTER TABLE investments ADD bank TEXT;
ERROR 1067 (42000): Invalid default value for 'created_at'
und die letzten beiden Spalten meiner Tabelle sind created_at
und updated_at
.
Hier ist meine Tabellenstruktur:
Antworten:
Das Problem liegt an sql_modes . Bitte überprüfen Sie Ihre aktuellen sql_modes mit dem Befehl:
Und entfernen Sie den sql_mode " NO_ZERO_IN_DATE, NO_ZERO_DATE ", damit es funktioniert. Dies ist der Standard-SQL-Modus in neuen MySQL-Versionen.
Sie können sql_mode global als root festlegen, indem Sie folgende Befehle ausführen:
quelle
Bevor Sie Anweisungen ausführen, setzen Sie dies einfach in die erste Zeile:
quelle
NO_ZERO_IN_DATE,NO_ZERO_DATE
ermöglicht es uns jedoch nur, andere Sicherheitsfunktionen beizubehalten:SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Versuchen Sie, den folgenden Befehl auszuführen:
und
Der Grund, warum Sie diesen Fehler erhalten, ist, dass Sie keinen Standardwert für die Felder
created_at
undupdated_at
festlegen. MySQL akzeptiert Ihren Befehl nicht, da die Werte für diese Spalten nicht null sein dürfen.Hoffe das hilft.
quelle
Beim Versuch, eine Datenbank eines Drittanbieters zu installieren, ist derselbe Fehler aufgetreten. Ich habe die vorgeschlagene Lösung erfolglos ausprobiert, d. H.
SET sql_mode = '';
Dann habe ich den folgenden Befehl ausprobiert, mit dem die Datenbank installiert werden konnte
SET GLOBAL sql_mode = '';
quelle
SET sql_mode = '';
ist jetzt veraltet,SET GLOBAL sql_mode = ''
ist OKIn meinem Fall muss ich eine Datei importieren. Also habe ich einfach SET sql_mode = '' hinzugefügt; am Anfang der Datei und es funktioniert!
quelle
Führen Sie diese Abfrage aus:
Für mich geht das
quelle
Sie können es so machen:
siehe: https://mariadb.com/kb/en/mariadb/timestamp/
Stichprobe
quelle
Ich hatte ein ähnliches Problem. Folgendes hat es gelöst:
Veränderung:
recollect_date TIMESTAMP DEFAULT 'CURRENT_TIMESTAMP',
zu:
recollect_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
dh entfernen Sie einfach die Anführungszeichen um CURRENT_TIMESTAMP .
Hoffe das hilft jemandem.
quelle
Wie in der Antwort von @Bernd Buffen erwähnt. Dies ist ein Problem mit MariaDB 5.5. Ich aktualisiere MariaDB 5.5 einfach auf MariaDB 10.1 und das Problem wurde behoben.
Hier Schritte zum Upgrade von MariaDB 5.5 auf MariaDB 10.1 unter CentOS 7 (64-Bit)
Fügen Sie dem MariaDB-Repo die folgenden Zeilen hinzu.
nano /etc/yum.repos.d/mariadb.repo
und fügen Sie die folgenden Zeilen ein.service mariadb stop
Update durchführen
yum update
Starten von MariaDB und Durchführen eines Upgrades
service mariadb start
mysql_upgrade
Alles getan.
Überprüfen Sie die MariaDB-Version:
mysql -V
HINWEIS : Bitte sichern Sie immer die Datenbank (en), bevor Sie Upgrades durchführen. Daten können verloren gehen, wenn das Upgrade fehlgeschlagen ist oder ein Fehler aufgetreten ist.
quelle
Mein Problem wurde behoben.
quelle
Konvertieren Sie es einfach durch diese Zeile:
für die neue Tabelle:
für vorhandene Tabelle:
Quelle :
https://dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html
quelle
Melden Sie sich für Mysql5.7 in der mysql-Befehlszeile an und führen Sie den Befehl mysql> show variables wie 'sql_mode' aus. Es wird angezeigt, dass NO_ZERO_IN_DATE, NO_ZERO_DATE im sql_mode.
Versuchen Sie, eine Zeile unter [mysqld] in Ihre mysql conf-Datei einzufügen, um die beiden Optionen zu entfernen. Meine (mysql 5.7 unter Ubuntu 16) lautet /etc/mysql/mysql.conf.d/mysqld.cnf
Starten Sie jetzt MySQL neu. Es klappt!
quelle
Für Mysql8.0.18:
Entfernen Sie "([fsp])", mein Problem wurde behoben.
quelle
Überprüfen Sie zunächst, ob vorhandene Modi den folgenden Befehl in Ihrem Terminal verwenden:
$ mysql -u root -p -e "SHOW VARIABLES LIKE 'sql_mode';"
oder
mysql> show variables like 'sql_mode';
Sie würden eine Ausgabe wie unten sehen
Modus (e) über my.cnf deaktivieren: In diesem Fall müssen Sie die Modi NO_ZERO_IN_DATE und NO_ZERO_DATE entfernen
Öffnen Sie die Datei my.cnf (Im Allgemeinen finden Sie die Datei my.cnf in /etc/my.cnf oder /etc/mysql/my.cnf).
Aktualisieren Sie die Modi in my.cnf unter der
[mysqld]
Überschriftsql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Hier habe ich die Modi NO_ZERO_IN_DATE, NO_ZERO_DATE weggelassen
Starten Sie den MySQL-Server neu
$ /etc/init.d/mysql restart
quelle