O erro é devido ao modo sql, que pode ser o modo estrito de acordo com a documentação MYSQL 5.7 mais recente
A documentação do MySQL 5.7 diz :
O modo estrito afeta se o servidor permite '0000-00-00' como uma data válida: Se o modo estrito não estiver ativado, '0000-00-00' é permitido e inserções não produzem nenhum aviso. Se o modo estrito estiver habilitado, '0000-00-00' não é permitido e inserções produzem um erro, a menos que IGNORE seja fornecido também. Para INSERT IGNORE e UPDATE IGNORE, '0000-00-00' é permitido e inserções produzem um aviso.
Para verificar o modo MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Desativando o modo STRICT_TRANS_TABLES
No entanto, para permitir o formato 0000-00-00 00:00:00
você deve desabilitar o modo STRICT_TRANS_TABLES no arquivo de configuração mysql ou por comando
Por comando
SET sql_mode = '';
ou
SET GLOBAL sql_mode = '';
Usando a palavra-chave GLOBAL
requer super previlégios e afeta as operações que todos os clientes se conectam a partir daquele momento
se acima não estiver funcionando, vá para /etc/mysql/my.cnf
(de acordo com o ubuntu) e comenteSTRICT_TRANS_TABLES
Além disso, se você deseja definir permanentemente o modo sql na inicialização do servidor, inclua SET sql_mode=''
no my.cnf
Linux ou MacOS. Para Windows, isso deve ser feito em my.ini
arquivo.
Nota
No entanto, o modo estrito não é habilitado por padrão no MYSQL 5.6. Portanto, ele não produz o erro de acordo com a documentação MYSQL 6 que diz
O MySQL permite que você armazene um valor “zero” de '0000-00-00' como uma “data fictícia”. Em alguns casos, isso é mais conveniente do que usar valores NULL e usa menos dados e espaço de índice. Para desabilitar '0000-00-00', ative o modo SQL NO_ZERO_DATE.
ATUALIZAR
Em relação ao bug, como dito por @ Dylan-Su:
Não acho que esse seja o bug da maneira como o MYSQL evolui ao longo do tempo, devido ao qual algumas coisas são alteradas com base em melhorias futuras do produto.
No entanto, tenho outro relatório de bug relacionado à NOW()
função
O campo data e hora não aceita o padrão AGORA ()
Outra observação útil [consulte Inicialização e atualização automática para TIMESTAMP e DATETIME ]
A partir do MySQL 5.6.5, as colunas TIMESTAMP e DATETIME podem ser inicializadas e atualizadas automaticamente para a data e hora atuais (ou seja, o carimbo de data / hora atual). Antes de 5.6.5, isso era verdadeiro apenas para TIMESTAMP e para no máximo uma coluna TIMESTAMP por tabela. As notas a seguir descrevem primeiro a inicialização e atualização automáticas para MySQL 5.6.5 e superior, depois as diferenças para as versões anteriores a 5.6.5.
Atualização sobre NO_ZERO_DATE
A partir do MySQL a partir de 5.7.4, esse modo está obsoleto. Para a versão anterior, você deve comentar a linha respectiva no arquivo de configuração. Consulte a documentação do MySQL 5.7 em NO_ZERO_DATE
NULL
para isso.