sql >> Databasteknik >  >> RDS >> Mysql

ER_TRUNCATED_WRONG_VALUE:Felaktigt datetime-värde

Uppenbarligen är datetime-värdet inte ett giltigt MySQL Datetime . Men det finns ett arbete kring att ändra Server SQL-lägen .

Av någon anledning, i min utvecklingsserver, togs MySQL-standardlägeskonfigurationerna bort helt. Därför fanns det inga begränsningar för hur jag kunde infoga datetime.

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

På produktionsservern å andra sidan fanns det massor av restriktioner som berättade för mysql-servern vilka typer av datetime-format som skulle accepteras.

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

Detta är inte en säker metod, men jag ändrade MySQL-begränsningslägena till no_engine_substitution , och voila, allt fungerar som en charm (nästan). Du måste ändra lägena GLOBAL och SESSION för att detta ska fungera.

Standardläget för SQL är 'NO_ENGINE_SUBSTITUTION', så vi sätter läget till det. Det finns fler lägen du kan lägga till svåra:

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

Nu ska läget GLOBAL och SESSION ställas in på 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)


  1. Hibernate Query problem med Informix

  2. Räknar totalt per dag med mitt resultat i SQL

  3. Hur man uppgraderar MySQL på CentOS

  4. PostgreSQL-fel:Programmet kan inte starta eftersom libpq.dll saknas på din dator