2009-07-29 13 views
2

Ich verwende MySQL (niemand ist perfekt), Version 4.1, und ich bin es gewohnt, wie das einige Zeitstempel Spalten zu definieren:Standarddatumswert in MySQL definieren, ähnlich zu zeitzustempeln

ALTER TABLE foo ADD creation TIMESTAMP DEFAULT NOW() ; 

Ich möchte mache genau dasselbe, aber für ein Date-Feld. Der Grund dafür ist, dass ich keine TIMESTAMP-Genauigkeit benötige und da in MySQL kein funktionaler Index existiert, kann ich nicht schnell auf die Zeilen mit einem bestimmten Datum zugreifen (unabhängig von der Tageszeit). Also habe ich versucht die folgenden, aber es funktioniert einfach nicht:

ALTER TABLE foo ADD creation_date DATE DEFAULT CURDATE() ; 
ERROR 1067 (42000): Invalid default value for 'creation_date' 

Oder sogar

ALTER TABLE foo ADD creation_date DATE DEFAULT DATE(NOW()) ; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(now())' at line 1 

Welche funktioniert auch nicht.

Irgendwelche Ideen?

Antwort

4

In MySQL müssen die Standardwerte konstant sein. Funktionen oder Ausdrücke sind nicht erlaubt.

Die Ausnahme ist der TIMESTAMP-Typ, für den CURRENT_TIMESTAMP ein gültiger nicht konstanter Standardwert ist.

See 4.1 manual: Data Type Default Values

+0

Hum, so gibt es keine reine MySQL Lösung für 4.1? – jeje

+0

Legen Sie das Datum mit CURDATE() fest, wenn Sie die Zeile EINFÜGEN oder AKTUALISIEREN. –

+0

Yep .. clientseitige Lösung :( – jeje