sql >> Databáze >  >> RDS >> Mysql

ER_TRUNCATED_WRONG_VALUE:Nesprávná hodnota data a času

Hodnota datetime zřejmě není platná MySQL Datetime . Existuje však práce kolem úpravy režimů SQL serveru .

Z nějakého důvodu byly na mém vývojovém serveru zcela odstraněny konfigurace výchozího režimu MySQL. Proto neexistovala žádná omezení, jak mohu vložit datum a čas.

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

Na druhé straně na produkčním serveru byla spousta omezení, která serveru mysql říkala, jaké formáty data a času má přijmout.

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

Toto není bezpečná metoda, ale změnil jsem režimy omezení MySQL na no_engine_substitution , a voila, všechno funguje jako kouzlo (téměř). Aby to fungovalo, musíte změnit režimy GLOBAL a SESSION.

Standardní režim SQL je 'NO_ENGINE_SUBSTITUTION', takže režim nastavíme na tento. Existuje více režimů, které můžete přidat do náročných:

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

Nyní by měl být režim GLOBAL a SESSION nastaven na 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. Využití výčtu MyBatis

  2. Node je 20x rychlejší než .NET Core v připojení k Postgresu

  3. Uložené procedury vs spouštěče v MySQL

  4. Po vypuštění tabulky se MySQL zasekne