94 votes

Valeur par défaut non valide pour 'dateAdded'.

J'ai un problème stupide avec SQL que je ne peux pas résoudre.

ALTER TABLE  \`news\` 
 ADD  \`dateAdded\` DATETIME NOT NULL DEFAULT CURRENT\_TIMESTAMP AUTO\_INCREMENT ,
 ADD PRIMARY KEY (  \`dateAdded\` )

Erreur :

(#1067)Invalid default value for 'dateAdded'

Quelqu'un peut-il m'aider ?

10 votes

C'est peut-être une question stupide, mais pourquoi vous AUTO_INCREMENT DATETIME ?

145voto

Marc B Points 195501

CURRENT_TIMESTAMP n'est acceptable que sur TIMESTAMP champs. DATETIME les champs doivent être laissés soit avec une valeur par défaut nulle, soit sans valeur par défaut - les valeurs par défaut doivent être des valeurs constantes, et non le résultat d'une expression.

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

Vous pouvez contourner ce problème en définissant un déclencheur post-insertion sur la table pour remplir une valeur "now" sur tous les nouveaux enregistrements.

53voto

David Soussan Points 2572

CURRENT_TIMESTAMP est spécifique à une version et est maintenant autorisé pour DATETIME à partir de la version 5.6.

Voir Documentation sur MySQL .

9 votes

Vous êtes sûr ? J'obtiens l'erreur ci-dessus dans la version 5.7.x

17voto

Torsten Ojaperv Points 611

Notez également que lorsque vous spécifiez DATETIME como DATETIME(3) ou comme sur MySQL 5.7.x, vous devez aussi ajouter la même valeur pour CURRENT_TIMESTAMP(3) . Si ce n'est pas le cas, il continuera à lancer des Valeur par défaut non valide '.

1 votes

Ceci a résolu le problème pour moi sur 5.7.x. Mes champs datetime étaient définis comme datetime(6) et l'utilisation de CURRENT_TIMESTAMP(6) a résolu le problème.

1 votes

Cela mérite d'être souligné.

1voto

Hamid ER-REMLI Points 34

Changez le type de datetime en timestamp et ça marchera ! J'ai eu le même problème pour mysql 5.5.56-MariaDB - MariaDB Server J'espère que cela pourra vous aider... désolé si je suis trop long.

1voto

Darshn Points 825

J'ai eu le même problème, la solution suivante a résolu mon problème.

  • Sélectionnez le type comme 'TIMESTAMP'.

  • N'ENTREZ RIEN DANS LE CHAMP LONGUEUR/VALEUR. LAISSEZ-LE VIERGE

  • Sélectionnez CURRENT_TIMESTAMP comme valeur par défaut.

J'utilise la version 5.5.56 de MySQL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X