'2013-08-25T17:00:00+00:00'
Dies ist ein gültiger iso-8601- Datums- / Uhrzeitwert, aber kein gültiges MySQL-Datums- / Uhrzeitliteral . In diesem Punkt ist der Entwickler falsch.
In der Dokumentation wird erklärt, was zu ALLOW_INVALID_DATES
tun ist:
Stellen Sie nur sicher, dass der Monat im Bereich von 1 bis 12 und der Tag im Bereich von 1 bis 31 liegt.
Mit anderen Worten, 2013-02-31
wäre ein zulässiges Datum, wenn allow_invalid_dates
gesetzt ist. Diese Option führt nichts aus, wenn das Datum oder die Uhrzeit nicht einmal in einem gültigen Format für MySQL vorliegen.
Das +00:00
ist die Zeitzone von Offset UTC . In diesem Fall wird die Uhrzeit in UTC angegeben, sodass der Versatz null Stunden und null Minuten beträgt.
Ihre Abhilfe wäre das zu entfernen , STRICT_TRANS_TABLES
von der sql_mode
die eine Standard in der Konfigurationsdatei während der MySQL 5.6 Installation erstellt ist ... Sie müssen die Auswirkungen der Veränderung dieses sorgfältig prüfen, aber es erlaubt den Daten in zu gehen.
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)
STRICT_TRANS_TABLES
in eine Standardkonfigurationsdatei wurde nur in MySQL 5.6 eingeführt, was die Verhaltensänderung erklärt. Wenn Sie diesSQL_MODE
in früheren Versionen aktivieren , würde die Abfrage auch in diesen Versionen unterbrochen.