Nieprawidłowa wartość domyślna dla „dateAdded”

91

Mam głupi problem z SQL, którego nie mogę naprawić.

ALTER TABELA `nowości` 
 DODAJ „dateAdded” DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 DODAJ KLUCZ PODSTAWOWY (`dateAdded`)

Błąd:

(#1067)Invalid default value for 'dateAdded'

Czy ktoś może mi pomóc?

Robin Van den Broeck
źródło
9
To może być głupie pytanie, ale dlaczego AUTO_INCREMENT DATETIME?
jave.web

Odpowiedzi:

138

CURRENT_TIMESTAMPjest dopuszczalne tylko na TIMESTAMPpolach. DATETIMEw polach należy pozostawić pustą wartość domyślną lub w ogóle brak wartości domyślnej - wartości domyślne muszą być wartością stałą, a nie wynikiem wyrażenia.

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

Możesz obejść ten problem, ustawiając wyzwalacz post-insert w tabeli, aby wypełnić wartość „now” w każdym nowym rekordzie.

Marc B.
źródło
70
Wygląda na to, że od mysql 5.6.5 możesz używać CURRENT_TIMESTAMP z polami DATETIME. Zobacz dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman
2
Dzięki Frank, znalazłem ten problem podczas próby zaimportowania wyeksportowanej bazy danych z najnowszego xampp do wcześniejszej.
HCD
HCD, Frank ... znalazł ten sam problem podczas eksportowania z MariaDb 10.x do MariaDB 5.5 ... dzięki
Aukhan
1
Ten błąd występuje również w Mariadbie 5.5. Uaktualnij do mariadb 10 i jego rozwiązanie. Dzięki Frank
Samuel Tesler
51

CURRENT_TIMESTAMPjest specyficzna dla wersji i jest teraz dozwolona dla DATETIMEkolumn od wersji 5.6.

Zobacz dokumentację MySQL .

David Soussan
źródło
9
Jesteś pewny ? Powyższy błąd otrzymuję w wersji 5.7.x
Ramesh Pareek
17

Zwróć także uwagę, gdy określasz DATETIMEjako DATETIME(3)lub podobne w MySQL 5.7.x, musisz również dodać tę samą wartość dla CURRENT_TIMESTAMP(3). Jeśli nie, będzie nadal wyświetlał „ Nieprawidłowa wartość domyślna ”.

Torsten Ojaperv
źródło
1
To rozwiązało problem dla mnie w wersji 5.7.x. Moje pola datetime zostały zdefiniowane jako datetime (6) i użycie CURRENT_TIMESTAMP (6) rozwiązało problem
Brad
1
Jest to godne uwagi.
Mateus Felipe
1

Miałem ten sam problem, po naprawie rozwiązałem mój problem.

  • Wybierz Typ jako „TIMESTAMP”

  • NIE WPISUJ NICZEGO W POLU DŁUGOŚCI / WARTOŚCI. ZACHOWAJ PUSTE

  • Wybierz CURRENT_TIMESTAMP jako wartość domyślną.

Używam MySQL w wersji 5.5.56

Darshn
źródło
0

Mam mysql w wersji 5.6.27 na moim LEMP i CURRENT_TIMESTAMP, ponieważ wartość domyślna działa dobrze.

Abraham Tugalov
źródło
0

mysql w wersji 5.5 ustaw domyślną wartość datetime na CURRENT_TIMESTAMP będzie zgłosić błąd, który można zaktualizować do wersji 5.6, ustawia domyślną wartość daty i godziny jako CURRENT_TIMESTAMP

张春吉
źródło
0

Zmień typ z datetime na timestamp i zadziała! Miałem ten sam problem z mysql 5.5.56-MariaDB - Serwer MariaDB Mam nadzieję, że może pomóc ... przepraszam, jeśli pozbawiony

Hamid ER-REMLI
źródło
0

Rozwiązałem swoje, zmieniając się DATEnaDATETIME

iSafa
źródło