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

ER_TRUNCATED_WRONG_VALUE:valor de data e hora incorreto


Aparentemente, o valor datetime não é um MySQL Datetime válido. . Mas há uma maneira de modificar os Modos SQL do servidor .

Por alguma razão, no meu servidor de desenvolvimento, as configurações do modo padrão do MySQL foram completamente removidas. Portanto, não havia restrições sobre como eu poderia inserir o datetime.
mysql> select @@sql_mode;
    +------------+
    | @@sql_mode |
    +------------+
    |            |
    +------------+
    1 row in set (0.00 sec)

No servidor de produção, por outro lado, havia uma tonelada de restrições que diziam ao servidor mysql que tipos de formatos de data e hora aceitar.
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+

Este não é um método seguro, mas alterei os modos de restrição do MySQL para no_engine_substitution , e voila, tudo funciona como um encanto (quase). Você precisa alterar os modos GLOBAL e SESSION para que isso funcione.

O modo SQL padrão é 'NO_ENGINE_SUBSTITUTION', então vamos colocar o modo para isso. Existem mais modos que você pode adicionar difíceis:
SET GLOBAL sql_mode = '<mode>';
SET SESSION sql_mode = '<mode>';

Agora o modo GLOBAL e SESSION deve ser definido como NO_ENGINE_SUBSTITUTION
mysql> SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
mysql> SELECT @@SESSION.sql_mode;
+------------------------+
| @@SESSION.sql_mode     |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
mysql> SELECT @@GLOBAL.sql_mode;
+------------------------+
| @@GLOBAL.sql_mode      |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)