'2013-08-25T17:00:00+00:00'
Ini adalah nilai dato iso-8601 yang valid , tetapi ini bukan dataman literal MySQL yang valid . Pada titik itu, pengembang salah.
The dokumentasi menjelaskan apa ALLOW_INVALID_DATES
yang dilakukannya:
Pastikan hanya bahwa bulan berada dalam kisaran 1 hingga 12 dan hari tersebut dalam kisaran 1 hingga 31.
Dengan kata lain, 2013-02-31
akan menjadi tanggal yang diizinkan jika allow_invalid_dates
diatur. Opsi ini tidak melakukan apa-apa ketika tanggal atau datetime bahkan tidak dalam format yang valid untuk MySQL.
Ini +00:00
adalah offset zona waktu dari UTC . Dalam hal ini, waktu yang dinyatakan dalam UTC, jadi offsetnya adalah nol jam, nol menit.
Solusi Anda adalah menghapus STRICT_TRANS_TABLES
dari sql_mode
yang merupakan default di file konfigurasi yang dibuat selama proses instalasi MySQL 5.6 ... Anda perlu mempertimbangkan dengan cermat implikasi dari mengubah ini, tetapi itu memungkinkan data untuk masuk.
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
dalam file konfigurasi default hanya diperkenalkan di MySQL 5.6, yang menjelaskan perubahan perilaku ... jika Anda mengaktifkan iniSQL_MODE
di versi sebelumnya, kueri juga akan pecah di versi itu.