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.