O erro é por causa do modo sql que pode ser o modo estrito conforme a documentação mais recente do MYSQL 5.7
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 habilitado, '0000-00-00' é permitido e as inserções não produzem aviso.Se o modo estrito estiver habilitado, '0000- 00-00' não é permitido e as inserções produzem um erro, a menos que IGNORE também seja fornecido. Para INSERT IGNORE e UPDATE IGNORE, '0000-00-00' é permitido e as 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ê tem que desabilitar o modo STRICT_TRANS_TABLES no arquivo de configuração do mysql ou por comando Por comando
SET sql_mode = '';
ou
SET GLOBAL sql_mode = '';
Usando a palavra-chave
GLOBAL
requer super privilégios e afeta as operações que todos os clientes se conectam a partir desse momento se acima não estiver funcionando, vá para
/etc/mysql/my.cnf
(conforme o Ubuntu) e comente STRICT_TRANS_TABLES
Além disso, se você deseja definir permanentemente o modo sql na inicialização do servidor, inclua
SET sql_mode=''
em my.cnf
no Linux ou MacOS. Para Windows, isso deve ser feito em my.ini
Arquivo. Observação
No entanto, o modo estrito não está habilitado por padrão no MYSQL 5.6. Portanto, ele não produz o erro conforme Documentação do 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', habilite o modo SQL NO_ZERO_DATE.
ATUALIZAÇÃO
Em relação ao problema do bug, conforme dito por @Dylan-Su:
Eu não acho que este seja o bug da maneira como o MYSQL evoluiu ao longo do tempo, devido ao qual algumas coisas são alteradas com base em melhorias adicionais do produto.
No entanto, tenho outro relatório de bug relacionado ao
NOW()
função O campo Datetime não aceita o padrão NOW()
Outra observação útil [consulte Inicialização e atualização automáticas 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 timestamp atual). Antes do 5.6.5, isso é verdade 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 o MySQL 5.6.5 e superior, depois as diferenças para as versões anteriores à 5.6.5.
Atualização referente a NO_ZERO_DATE
A partir do MySQL a partir de 5.7.4 este modo está obsoleto. Para a versão anterior você deve comentar a respectiva linha no arquivo de configuração. Consulte a documentação do MySQL 5.7 em NO_ZERO_DATE