2009-07-29 20 views
2

J'utilise MySQL (personne est parfait), la version 4.1 et je suis utilisé pour définir des colonnes d'horodatage comme:Définir la valeur de date par défaut dans MySQL, similaire à horodater

ALTER TABLE foo ADD creation TIMESTAMP DEFAULT NOW() ; 

Je voudrais faites exactement la même chose, mais pour un champ DATE. La raison étant que je n'ai pas besoin d'une précision TIMESTAMP et qu'aucun index fonctionnel n'existe dans MySQL, je ne peux pas accéder rapidement aux lignes avec une date donnée (quelle que soit l'heure de la journée). J'ai donc essayé ce qui suit, mais il ne fonctionne tout simplement pas:

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

Ou encore

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 

Ce qui ne fonctionne pas non plus.

Des idées?

Répondre

4

Dans MySQL, les valeurs par défaut doivent être constantes. Les fonctions ou expressions ne sont pas autorisées.

L'exception est le type TIMESTAMP, pour lequel CURRENT_TIMESTAMP est une valeur par défaut non constante valide.

See 4.1 manual: Data Type Default Values

+0

Hum, donc il n'y a pas de solution MySQL pure pour 4.1? – jeje

+0

Définissez la date à l'aide de CURDATE() lorsque vous insérez ou mettez à jour la ligne. –

+0

Yep .. solution côté client :( – jeje