Valore predefinito non valido per "dateAdded"


90

Ho uno stupido problema con SQL che non riesco a risolvere.

ALTER TABLE `news` 
 AGGIUNGI `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 AGGIUNGI CHIAVE PRINCIPALE (`dateAdded`)

Errore:

(#1067)Invalid default value for 'dateAdded'

Qualcuno può aiutarmi?


8
Questa potrebbe essere una domanda stupida, ma perché lo fai AUTO_INCREMENT DATETIME?
jave.web

Risposte:


137

CURRENT_TIMESTAMPè accettabile solo sui TIMESTAMPcampi. DATETIMEi campi 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 pertinenti: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

È possibile aggirare questo problema impostando un trigger di post-inserimento sulla tabella per inserire un valore "ora" su qualsiasi nuovo record.


70
Sembra che a partire da mysql 5.6.5, puoi usare CURRENT_TIMESTAMP con i campi DATETIME. Vedi dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman

2
Grazie Frank, ho riscontrato questo problema durante il tentativo di importare un db esportato dall'ultimo xampp a uno precedente.
L'HCD

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

1
Questo errore si verifica anche in mariadb 5.5. Esegui l'upgrade a mariadb 10 ed è risolto. Grazie Frank
Samuel Tesler


16

Nota anche quando specifichi DATETIMEas DATETIME(3)o like su MySQL 5.7.x, devi anche aggiungere lo stesso valore per CURRENT_TIMESTAMP(3). In caso contrario, continuerà a lanciare " Valore predefinito non valido ".


Questo ha risolto il problema per me su 5.7.x. I miei campi datetime sono stati definiti come datetime (6) e l'utilizzo di CURRENT_TIMESTAMP (6) ha risolto il problema
Brad

Questo è molto degno di nota.
Mateus Felipe

1

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

  • Seleziona Tipo come "TIMESTAMP"

  • NON INSERIRE NULLA NEL CAMPO LUNGHEZZA / VALORI. TENERE VUOTO

  • Seleziona CURRENT_TIMESTAMP come valore predefinito.

Sto usando MySQL ver 5.5.56


0

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


0

mysql versione 5.5 imposta il valore predefinito di datetime come CURRENT_TIMESTAMP sarà un errore di rapporto che puoi aggiornare alla versione 5.6, imposta il valore predefinito di datetime come CURRENT_TIMESTAMP


0

Cambia il tipo da datetime a timestamp e funzionerà! Ho avuto lo stesso problema con mysql 5.5.56-MariaDB - MariaDB Server Spero che possa aiutare ... scusate se deprecato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.