Ungültiger Standardwert für 'dateAdded'

90

Ich habe ein dummes Problem mit SQL, das ich nicht beheben kann.

ALTER TABLE `news` 
 ADD `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 PRIMARY KEY HINZUFÜGEN (`dateAdded`)

Error:

(#1067)Invalid default value for 'dateAdded'

Kann mir jemand helfen?

Robin Van den Broeck
quelle
8
Das mag eine dumme Frage sein, aber warum tust du das AUTO_INCREMENT DATETIME?
jave.web

Antworten:

137

CURRENT_TIMESTAMPist nur auf TIMESTAMPFeldern akzeptabel . DATETIMEFelder müssen entweder mit einem Null-Standardwert oder überhaupt keinem Standardwert belassen werden. Standardwerte müssen ein konstanter Wert sein, nicht das Ergebnis eines Ausdrucks.

relevante Dokumente: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

Sie können dies umgehen, indem Sie einen Auslöser nach dem Einfügen in der Tabelle festlegen, um einen "Jetzt" -Wert für alle neuen Datensätze einzugeben.

Marc B.
quelle
70
Ab MySQL 5.6.5 können Sie CURRENT_TIMESTAMP mit DATETIME-Feldern verwenden. Siehe dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman
2
Vielen Dank, Frank, habe dieses Problem beim Versuch gefunden, eine exportierte Datenbank von der neuesten xampp in eine frühere zu importieren.
Die HCD
Die HCD, Frank ... fand das gleiche Problem beim Exportieren von MariaDb 10.x nach MariaDB 5.5 ... danke
Aukhan
1
Dieser Fehler tritt auch in Mariadb 5.5 auf. Upgrade auf Mariadb 10 und es ist gelöst. Vielen Dank Frank
Samuel Tesler
50

CURRENT_TIMESTAMPist versionenspezifisch und ab DATETIMEVersion 5.6 für Spalten zulässig .

Siehe MySQL-Dokumente .

David Soussan
quelle
9
bist du sicher ? Ich bekomme den obigen Fehler in Version 5.7.x
Ramesh Pareek
16

Beachten Sie auch, dass Sie bei der Angabe von MySQL 5.7.x DATETIMEals DATETIME(3)oder ähnlich den gleichen Wert für hinzufügen müssen CURRENT_TIMESTAMP(3). Wenn nicht, wird weiterhin ' Ungültiger Standardwert ' ausgegeben .

Torsten Ojaperv
quelle
Dies löste das Problem für mich am 5.7.x. Meine datetime-Felder wurden als datetime (6) definiert und mit CURRENT_TIMESTAMP (6) wurde das Problem gelöst
Brad
Dies ist sehr erwähnenswert.
Mateus Felipe
1

Ich hatte das gleiche Problem, nach der Behebung wurde mein Problem gelöst.

  • Wählen Sie Typ als 'TIMESTAMP'

  • Geben Sie nichts in das Feld Länge / Wert ein. HALTE ES LEER

  • Wählen Sie CURRENT_TIMESTAMP als Standardwert aus.

Ich verwende MySQL Version 5.5.56

Darshn
quelle
0

Ich habe MySQL-Version 5.6.27 auf meinem LEMP und CURRENT_TIMESTAMP als Standardwert funktioniert gut.

Abraham Tugalov
quelle
0

In MySQL Version 5.5 wird der Standardwert für die Datumszeit als CURRENT_TIMESTAMP festgelegt. Es handelt sich um einen Berichtsfehler, den Sie auf Version 5.6 aktualisieren können. Der Standardwert für die Datumszeit wird als CURRENT_TIMESTAMP festgelegt

张春吉
quelle
0

Ändern Sie den Typ von Datum / Uhrzeit in Zeitstempel und es wird funktionieren! Ich hatte das gleiche Problem für MySQL 5.5.56-MariaDB - MariaDB Server Ich hoffe, es kann helfen ... Entschuldigung, wenn es beraubt ist

Hamid ER-REMLI
quelle