Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ER_TRUNCATED_WRONG_VALUE:Falscher datetime-Wert

Anscheinend ist der datetime-Wert kein gültiger MySQL Datetime . Aber es gibt eine Möglichkeit, die Server-SQL-Modi .

Aus irgendeinem Grund wurden auf meinem Entwicklungsserver die MySQL-Standardmoduskonfigurationen vollständig entfernt. Daher gab es keine Einschränkungen, wie ich die Datumszeit einfügen konnte.

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

Auf dem Produktionsserver hingegen gab es eine Menge Einschränkungen, die dem MySQL-Server mitteilten, welche Arten von Datetime-Formaten akzeptiert werden sollten.

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

Dies ist keine sichere Methode, aber ich habe die MySQL-Einschränkungsmodi auf no_engine_substitution geändert , und voila, alles funktioniert (fast) wie am Schnürchen. Sie müssen die Modi GLOBAL und SESSION ändern, damit dies funktioniert.

Der Standard-SQL-Modus ist 'NO_ENGINE_SUBSTITUTION', also setzen wir den Modus darauf. Es gibt noch mehr Modi, die Sie hinzufügen könnten:

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

Jetzt sollten der GLOBAL- und der SESSION-Modus auf NO_ENGINE_SUBSTITUTION

eingestellt sein
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)