Ich habe die folgende SQL-Create-Anweisung
mysql> CREATE TABLE IF NOT EXISTS `erp`.`je_menus` (
-> `id` INT(11) NOT NULL AUTO_INCREMENT ,
-> `name` VARCHAR(100) NOT NULL ,
-> `description` VARCHAR(255) NOT NULL ,
-> `live_start_date` DATETIME NULL DEFAULT NULL ,
-> `live_end_date` DATETIME NULL DEFAULT NULL ,
-> `notes` VARCHAR(255) NULL ,
-> `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
-> `created_by` INT(11) NOT NULL ,
-> `update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
-> `updated_by` INT(11) NOT NULL ,
-> `status` VARCHAR(45) NOT NULL ,
-> PRIMARY KEY (`id`) )
-> ENGINE = InnoDB;
folgenden Fehler geben
ERROR 1067 (42000): Invalid default value for 'create_date'
Was ist der Fehler hier?
Antworten:
Dies liegt am Server-SQL-Modus - NO_ZERO_DATE .
Aus der Referenz:
NO_ZERO_DATE
- Im strengen Modus kein'0000-00-00'
gültiges Datum zulassen . Mit der Option IGNORE können Sie weiterhin Nulldaten einfügen . Wenn Sie sich nicht im strengen Modus befinden, wird das Datum akzeptiert, es wird jedoch eine Warnung generiert.quelle
Wenn Sie das Skript über die MySQL-Workbench generiert haben.
Die folgende Zeile wird generiert
Entfernen Sie TRADITIONAL aus SQL_MODE, und dann sollte das Skript einwandfrei funktionieren
Andernfalls können Sie SQL_MODE als Ungültige Daten zulassen festlegen
quelle
TIMESTAMP hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC (siehe Dokument ). Der Standardwert muss innerhalb dieses Bereichs liegen.
Andere seltsame, verwandte Verhaltensweisen:
Randnotiz, wenn Sie NULL einfügen möchten:
quelle
column_name TIMESTAMP DEFAULT NOW()
. Vielleicht nicht für jede Situation geeignet, aber ich dachte, ich würde es teilen, da ich mich auch damit befasste.In Ubuntu Desktop 16.04 habe ich Folgendes getan:
Datei öffnen:
/etc/mysql/mysql.conf.d/mysqld.cnf
in einem Editor Ihrer Wahl.Suche:
sql_mode
, es wird irgendwo unter sein[mysqld]
.und
sql_mode
auf Folgendes einstellen :NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Speichern Sie den MySQL-Dienst und starten Sie ihn neu.
sudo service mysql restart
quelle
sql_mode
für meine Instanz von mySQL auf ubuntu16.04 nicht da war. Ich musste einen Eintrag dafür in die Datei einfügen, indem ich "NO_ZERO_DATE" entfernte. So, hier ist , wie es jetzt aussieht: #Adding die unterhalb der Linie loswerden NO_ZERO_DATE sql_mode = ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTIONsql_mode
Eintrag bereits vorhanden.Mit OS X installieren mysql von Homebrew , Systemvariablen basierend auf seiner mitkompilierten Defaults. Die Lösung besteht darin, "NO_ZERO_DATE" aus den Systemvariablen "sql_mode" zu entfernen.
Bitte beachten Sie nur, dass der Umfang dies beinhaltet.
Wenn Sie nur in Ihrer Sitzung etwas bewirken möchten, verwenden
"@@session"
Sie beispielsweise Folgendes :In diesem Fall hat dies keine Auswirkungen, sobald Ihre Sitzung endet oder Sie sie ändern. Es hat keine Auswirkungen auf andere Sitzungen.
Wenn Sie alle Clients betreffen möchten, verwenden Sie
"@@global"
zum Beispiel:In diesem Fall betrifft dies nur die Clients, die nach der Änderung eine Verbindung herstellen (nicht alle aktuellen Clients) und funktioniert nach dem Beenden des Servers nicht mehr.
quelle
Ich konnte dieses Problem unter OS X beheben, indem ich MySQL von Homebrew aus installierte
indem Sie Folgendes zu /usr/local/etc/my.cnf hinzufügen
und Neustart von MySQL
quelle
Ich hatte ein ähnliches Problem mit MySQL 5.7 mit dem folgenden Code:
`update_date` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
Ich habe dies stattdessen behoben:
`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
quelle
Um dieses Problem zu vermeiden, müssen Sie
NO_ZERO_DATE
die Konfiguration im MySQL-Modus entfernen .NO_ZERO_DATE
(und das nachfolgende Komma) aus der Konfiguration.Dies ist ein sehr häufiges Problem in der lokalen Umgebung mit wamp oder xamp.
quelle
Definieren Sie einfach die folgenden Zeilen oben in Ihrer Datenbank-SQL-Datei.
Es funktioniert für mich.
quelle
So deaktivieren Sie den strengen SQL-Modus
Geben Sie in die Datei die folgenden zwei Zeilen ein:
Starten Sie MySQL abschließend mit folgendem Befehl neu:
quelle
Möglicherweise möchten Sie die Zeitzoneneinstellung in der MySql-Instanz überprüfen:
In meinem Fall wurde mir klar, dass für das zugrunde liegende System die Zeitzone auf BST anstatt auf UTC eingestellt war, und daher wurde in der Erstellungs-Tabelle der Standardwert von '1970-01-01 00:00:01' um 1 Stunde zurückgedrängt, was dazu führte ein ungültiger Zeitstempelwert.
Für mich wollte ich eigentlich, dass die Zeitzone der Maschine auf UTC eingestellt ist, und das hat mich geklärt. Als ich Centos / 7 ausführte, tat ich es einfach
und alles neu gestartet.
quelle
Standardwerte sollten ab dem Jahr 1000 beginnen.
Beispielsweise,
Hoffe das hilft jemandem.
quelle
Ändere das:
Zu dem Folgendem:
quelle
Sie können dies einfach ändern:
Zu so etwas:
quelle