Valor padrão inválido para 'dateAdded'

90

Eu tenho um problema estúpido com o SQL que não consigo consertar.

ALTER TABLE `news` 
 ADICIONE `dataAdded` DATETIME NOT NULL PADRÃO CURRENT_TIMESTAMP AUTO_INCREMENT,
 ADICIONE CHAVE PRIMÁRIA (`data adicionada`)

Erro:

(#1067)Invalid default value for 'dateAdded'

Alguém pode me ajudar?

Robin Van den Broeck
fonte
8
Esta pode ser uma pergunta estúpida, mas por que você faz isso AUTO_INCREMENT DATETIME?
jave.web de

Respostas:

137

CURRENT_TIMESTAMPsó é aceitável em TIMESTAMPcampos. DATETIMEos campos devem ser deixados com um valor padrão nulo ou nenhum valor padrão - os valores padrão devem ser um valor constante, não o resultado de uma expressão.

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

Você pode contornar isso definindo um gatilho pós-inserção na tabela para preencher um valor "agora" em quaisquer novos registros.

Marc B
fonte
70
Parece que a partir do mysql 5.6.5, você pode usar CURRENT_TIMESTAMP com campos DATETIME. Consulte dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman
2
Obrigado Frank, encontrei este problema ao tentar importar um banco de dados exportado do xampp mais recente para um anterior.
O HCD de
O HCD, Frank ... encontrou o mesmo problema exportando de MariaDb 10.x para MariaDB 5.5 ... obrigado
Aukhan 01 de
1
Este erro também ocorre no mariadb 5.5. Atualize para mariadb 10 e está resolvido. Obrigado Frank
Samuel Tesler
50

CURRENT_TIMESTAMPé específico da versão e agora é permitido para DATETIMEcolunas a partir da versão 5.6.

Veja a documentação do MySQL .

David Soussan
fonte
9
você tem certeza ? Recebo o erro acima na versão 5.7.x
Ramesh Pareek
16

Observe também que ao especificar DATETIMEcomo DATETIME(3)ou como no MySQL 5.7.x, você também deve adicionar o mesmo valor para CURRENT_TIMESTAMP(3). Caso contrário, continuará apresentando ' Valor padrão inválido '.

Torsten Ojaperv
fonte
Isso resolveu o problema para mim em 5.7.x. Meus campos de data e hora foram definidos como datetime (6) e usando CURRENT_TIMESTAMP (6) resolveu o problema
Brad
Isso é altamente digno de nota.
Mateus Felipe
1

Eu tive o mesmo problema, a seguinte correção resolveu meu problema.

  • Selecione o tipo como 'TIMESTAMP'

  • NÃO INSIRA NADA NO CAMPO COMPRIMENTO / VALORES. MANTENHA EM BRANCO

  • Selecione CURRENT_TIMESTAMP como valor padrão.

Estou usando o MySQL versão 5.5.56

Darshn
fonte
0

Eu tenho mysql versão 5.6.27 em meu LEMP e CURRENT_TIMESTAMP como valor padrão funciona bem.

Abraham Tugalov
fonte
0

mysql versão 5.5 definir o valor padrão de data e hora como CURRENT_TIMESTAMP será um erro de relatório que você pode atualizar para a versão 5.6, ele define o valor padrão de data e hora como CURRENT_TIMESTAMP

张春吉
fonte
0

Mude o tipo de datetime para timestamp e funcionará! Eu tive o mesmo problema com mysql 5.5.56-MariaDB - MariaDB Server Espero que possa ajudar ... desculpe se obsoleto

Hamid ER-REMLI
fonte