'2013-08-25T17:00:00+00:00'
यह एक मान्य iso-8601 डेटाटाइम मान है, लेकिन यह मान्य MySQL डेटाटाइम शाब्दिक नहीं है । उस बिंदु पर, डेवलपर गलत है।
प्रलेखन बताते हैं क्या ALLOW_INVALID_DATES
करता है:
केवल यह जांचें कि महीना 1 से 12 तक की सीमा में है और दिन 1 से 31 की सीमा में है।
दूसरे शब्दों में, 2013-02-31
यदि allow_invalid_dates
सेट किया गया है तो एक स्वीकार्य तारीख होगी । यह विकल्प कुछ भी नहीं करता है जब तारीख या डेटाइम भी MySQL के लिए एक वैध प्रारूप में नहीं है।
+00:00
समय क्षेत्र से ऑफसेट है यूटीसी । इस मामले में, व्यक्त समय अंदर है , यूटीसी तो ऑफसेट शून्य घंटे, शून्य मिनट है।
MySQL 5.6 स्थापना प्रक्रिया के दौरान बनाई गई कॉन्फ़िग फ़ाइल में डिफ़ॉल्ट रूप STRICT_TRANS_TABLES
से उस पर से हटाने के लिए आपका वर्कअराउंड होगा sql_mode
... आपको इसे बदलने के निहितार्थ पर सावधानीपूर्वक विचार करने की आवश्यकता है, लेकिन यह डेटा को अंदर जाने की अनुमति देता है।
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)