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?


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.


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


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 '.


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


0

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


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.