Mysql
 sql >> Database >  >> RDS >> Mysql

ER_TRUNCATED_WRONG_VALUE:valore datetime errato

Apparentemente, il valore datetime non è un MySQL Datetime . Ma c'è un modo per modificare le Modalità SQL del server .

Per qualche motivo, nel mio server di sviluppo, le configurazioni della modalità predefinita di MySQL sono state completamente rimosse. Pertanto non c'erano restrizioni su come potevo inserire la data e l'ora.

mysql> select @@sql_mode;
    +------------+
    | @@sql_mode |
    +------------+
    |            |
    +------------+
    1 row in set (0.00 sec)

Sul server di produzione, d'altra parte, c'erano un sacco di restrizioni che dicevano al server mysql quali tipi di formati datetime accettare.

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

Questo non è un metodo sicuro, ma ho modificato le modalità di restrizione di MySQL in no_engine_substitution , e voilà, tutto funziona come un incantesimo (quasi). Devi cambiare le modalità GLOBALE e SESSIONE affinché funzioni.

La modalità SQL standard è "NO_ENGINE_SUBSTITUTION", quindi metteremo la modalità su quella. Ci sono più modalità che potresti aggiungere:

SET GLOBAL sql_mode = '<mode>';
SET SESSION sql_mode = '<mode>';

Ora le modalità GLOBAL e SESSION dovrebbero essere impostate su 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)