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