'2013-08-25T17:00:00+00:00'
Este es un valor válido de fecha y hora iso-8601 , pero no es un literal de fecha y hora válido de MySQL . En ese punto, el desarrollador es incorrecto.
La documentación explica qué ALLOW_INVALID_DATES
hace:
Compruebe solo que el mes está en el rango de 1 a 12 y el día está en el rango de 1 a 31.
En otras palabras, 2013-02-31
sería una fecha permitida si allow_invalid_dates
se establece. Esta opción no hace nada cuando la fecha o la fecha y hora ni siquiera están en un formato válido para MySQL.
El +00:00
es el desplazamiento de la zona horaria de UTC . En este caso, el tiempo expresado está en UTC, por lo que el desplazamiento es cero horas, cero minutos.
Su solución sería quitar el STRICT_TRANS_TABLES
de la sql_mode
que es un defecto en el archivo de configuración creado durante el proceso de instalación de MySQL 5.6 ... que debe considerar cuidadosamente las implicaciones de este cambio, pero sí permitir que los datos van en.
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
en un archivo de configuración predeterminado solo se introdujo en MySQL 5.6, lo que explica el cambio de comportamiento ... si habilita estoSQL_MODE
en versiones anteriores, la consulta también se rompería en esas versiones.