2012-01-25 17 views
72

Ho un problema stupido con SQL che non riesco a risolvere.Valore predefinito non valido per "dateAdded"

ALTER TABLE `news` 
ADD `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT , 
ADD PRIMARY KEY ( `dateAdded`) 

Errore:

(#1067)Invalid default value for 'dateAdded' 

Qualcuno può aiutarmi?

+3

Questa potrebbe essere una domanda stupida, ma perché si '' AUTO_INCREMENT' DateTime'? –

risposta

115

CURRENT_TIMESTAMP è accettabile solo nei campi TIMESTAMP. I campi DATETIME devono essere lasciati con un valore predefinito nullo o nessun valore predefinito - i valori predefiniti devono essere un valore costante, non il risultato di un'espressione.

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

È possibile aggirare questo impostando un trigger di post-inserimento nella tabella di compilare un "ora" il valore su eventuali nuovi record.

+52

Sembra come in mysql 5.6.5, puoi usare CURRENT_TIMESTAMP con i campi DATETIME. Vedi http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html –

+1

Grazie Frank, ho trovato questo problema quando provavo ad importare un db esportato dall'ultimo xampp a uno precedente. –

+0

L'HCD, Frank ... ha riscontrato lo stesso problema esportando da MariaDb 10.x a MariaDB 5.5 ... grazie – Aukhan

42

CURRENT_TIMESTAMP è specifico per la versione ed è ora consentito per le colonne DATETIME a partire dalla versione 5.6.

Vedere MySQL docs.

+3

sei sicuro? Ottengo l'errore sopra riportato nella versione 5.7.x. –

7

Nota anche quando si specifica DATETIME(3) o come MySQL 5.7.x, è necessario aggiungere lo stesso valore per CURRENT_TIMESTAMP(3). Altrimenti continuerà a lanciare 'Valore predefinito non valido'.

1

Ho mysql versione 5.6.27 sul mio LEMP e CURRENT_TIMESTAMP come valore predefinito funziona bene.

0

MySQL versione 5.5 insieme datetime valore predefinito CURRENT_TIMESTAMP sarà rapporto di errore è possibile aggiornare alla versione 5.6, è impostato il valore predefinito datetime come CURRENT_TIMESTAMP

0

Cambiare il tipo da datetime al timestamp e funzionerà! Ho avuto lo stesso problema per mysql 5.5.56-MariaDB - MariaDB Server spero che possa aiutare ... scusate se depricated

0

Ho avuto lo stesso problema, seguente correzione risolto il mio problema.

  • Seleziona tipo come 'TIMESTAMP'

  • NON inserisci qualcosa in lunghezza/valori di campo. TIENI BLANK

  • Seleziona CURRENT_TIMESTAMP come valore predefinito.

Sto usando MySQL ver 5.5.56

Problemi correlati