Mysql
 sql >> Baza danych >  >> RDS >> Mysql

ER_TRUNCATED_WRONG_VALUE:Nieprawidłowa wartość daty i godziny

Najwyraźniej wartość datetime nie jest prawidłową MySQL Datetime . Istnieje jednak praca nad modyfikacją trybów SQL serwera .

Z jakiegoś powodu na moim serwerze deweloperskim konfiguracje trybu domyślnego MySQL zostały całkowicie usunięte. Dlatego nie było żadnych ograniczeń dotyczących sposobu wstawiania daty i godziny.

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

Z drugiej strony na serwerze produkcyjnym istniało mnóstwo ograniczeń, które wskazywały serwerowi mysql, jakie formaty daty i godziny należy zaakceptować.

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

Nie jest to bezpieczna metoda, ale zmieniłem tryby ograniczeń MySQL na no_engine_substitution , i voila, wszystko działa jak czar (prawie). Aby to zadziałało, musisz zmienić tryby GLOBALNY i SESJI.

Standardowym trybem SQL jest 'NO_ENGINE_SUBSTITUTION', więc ustawimy ten tryb. Istnieje więcej trybów, które można dodać do trudnych:

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

Teraz tryb GLOBAL i SESSION powinny być ustawione 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL Za dużo połączeń

  2. Jak zamienić wartości dwóch wierszy w MySQL bez naruszania unikalnego ograniczenia?

  3. Jak włamać się do MySQL GROUP_CONCAT, aby pobrać ograniczoną liczbę wierszy?

  4. zwróć dane group_concat jako tablicę

  5. Wiosenne zapytanie o dane localdate zwraca błędne wpisy - minus jeden dzień