'2013-08-25T17:00:00+00:00'
Đây là một giá trị thời gian iso-8601 hợp lệ , nhưng nó không phải là một giá trị thời gian của MySQL hợp lệ . Về điểm đó, nhà phát triển không chính xác.
Các tài liệu giải thích những gì ALLOW_INVALID_DATES
không:
Chỉ kiểm tra xem tháng nằm trong phạm vi từ 1 đến 12 và ngày nằm trong phạm vi từ 1 đến 31.
Nói cách khác, 2013-02-31
sẽ là một ngày cho phép nếu allow_invalid_dates
được đặt. Tùy chọn này không làm gì cả khi ngày hoặc thời gian không thậm chí ở định dạng hợp lệ cho MySQL.
Đây +00:00
là phần bù múi giờ từ UTC . Trong trường hợp này, thời gian được biểu thị bằng UTC, do đó phần bù là 0 giờ, 0 phút.
Cách giải quyết của bạn sẽ là để loại bỏ các STRICT_TRANS_TABLES
từ sql_mode
đó là một mặc định trong tập tin cấu hình được tạo ra trong quá trình cài đặt MySQL 5.6 ... bạn cần phải xem xét một cách cẩn thận những tác động của việc thay đổi này, nhưng nó không cho phép các dữ liệu để đi vào.
mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into datetimetest(dt) values ('2013-08-26T12:00:00+00:00');
ERROR 1292 (22007): Incorrect datetime value: '2013-08-26T12:00:00+00:00' for column 'dt' at row 1
-- remove STRICT_TRANS_TABLES -- note that executing this only removes it for your
-- current session -- it does not make a server-wide config change
mysql> set @@sql_mode='no_engine_substitution';
Query OK, 0 rows affected (0.00 sec)
mysql> select @@sql_mode;
+------------------------+
| @@sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)
-- now MySQL will accept the invalid value, with a warning
mysql> insert into datetimetest(dt) values ('2013-08-26T12:00:00+00:00');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+-----------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------+
| Warning | 1265 | Data truncated for column 'dt' at row 1 |
+---------+------+-----------------------------------------+
1 row in set (0.00 sec)
-- the value did get inserted, but the time zone information was lost:
mysql> select * from datetimetest;
+----+---------------------+
| id | dt |
+----+---------------------+
| 1 | 2013-08-26 12:00:00 |
+----+---------------------+
1 row in set (0.00 sec)