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?


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.


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


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 .


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


0

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


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.