Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Valor padrão inválido para timestamp quando nenhum valor padrão é fornecido.


Embora o @jsnplank esteja certo de que os carimbos de data e hora são tratados de maneira diferente e você deve considerar o uso do tipo de dados datetime para essas 2 colunas específicas, no entanto, ele não explica a mensagem de erro.

A mensagem de erro é provavelmente o resultado de uma combinação de como o mysql trata os campos de timestamp quando nenhum valor padrão é fornecido e suas configurações de modo sql.

  1. Você define ambas as colunas de carimbo de data/hora como não nulas, sem nenhum valor padrão específico definido. Isso significa que o valor padrão da primeira coluna timestamp será current_timestamp() e também será atualizado para current_timestamp() sempre que o registro for alterado. É por isso que o 1º campo timestamp não gera uma mensagem de erro, não importa qual dos 2 seja o 1º.

    No entanto, o valor padrão da segunda coluna de carimbo de data/hora não nulo será '0000-00-00 00:00:00' se você não definir explicitamente um valor padrão.

    Consulte esta postagem do blog para obter mais detalhes .

  2. Provavelmente no_zero_date O modo sql também está habilitado em seu servidor explicitamente ou como parte do modo sql estrito. Este modo sql gera um erro se você deseja definir '0000-00-00 00:00:00' como valor padrão ou deseja inserir esse valor em qualquer campo de data.

Portanto, você pode usar o tipo de dados timestamp em sua tabela, mas tornar o 2º anulável ou fornecer 0 ou qualquer data válida (como a época) como um valor padrão explícito.

Como você está marcando as datas de início e término com esses campos, usar datetime em vez de timestamp como tipo de dados pode ser uma boa ideia.