Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

ER_TRUNCATED_WRONG_VALUE:Giá trị ngày giờ không chính xác

Rõ ràng, giá trị datetime không phải là MySQL Datetime hợp lệ . Nhưng có một công việc xung quanh việc sửa đổi Chế độ SQL máy chủ .

Vì một số lý do, trong máy chủ phát triển của tôi, cấu hình chế độ mặc định của MySQL đã bị loại bỏ hoàn toàn. Do đó, không có giới hạn nào về cách tôi có thể chèn ngày giờ.

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

Mặt khác, trên máy chủ sản xuất, có rất nhiều hạn chế cho máy chủ mysql biết loại định dạng datetime nào cần chấp nhận.

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

Đây không phải là một phương pháp an toàn, nhưng tôi đã thay đổi chế độ hạn chế MySQL thành no_engine_substitution , và thì đấy, mọi thứ hoạt động giống như một sự quyến rũ (gần như vậy). Bạn phải thay đổi chế độ TOÀN CẦU và SESSION để chế độ này hoạt động.

Chế độ SQL tiêu chuẩn là 'NO_ENGINE_SUBSTITUTION', vì vậy chúng tôi sẽ đặt chế độ đó. Có nhiều chế độ khác mà bạn có thể thêm khó khăn:

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

Bây giờ, chế độ GLOBAL và SESSION sẽ được đặt thành 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. Cách chèn mảng json vào cơ sở dữ liệu mysql với php

  2. Hiển thị dữ liệu mysql trong bảng được định dạng

  3. Cách chọn N dòng hàng đầu cho mỗi nhóm trong MySQL

  4. Cách giám sát việc triển khai MySQL với Prometheus &Grafana tại ScaleGrid

  5. Truy vấn SQL để đếm số lần các giá trị nhất định xảy ra trong nhiều hàng