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

Erro no MySQL ao definir o valor padrão para DATE ou DATETIME


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