Там в другого проблемы мимо NO_ZERO_DATE
проблемы: MySQL не использует ISO 8601 для даты, он использует ISO 9075 или даты SQL (на самом деле он использует все виды форматов, обработка даты MySQL довольно хаотичная). Есть некоторые тонкие отличия, самое большое существо, что 9075 не имеет T в середине. Большинство API-интерфейсов date справляются с этим, делая T необязательным, но не MySQL.
mysql> select time('1234-01-01T04:35:51.29Z');
+---------------------------------+
| time('1234-01-01T04:35:51.29Z') |
+---------------------------------+
| 00:12:34 |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)
Вместо того, чтобы давать ошибку или игнорировать T, MySQL дал отвратительно неправильный ответ.
mysql> select time('1234-01-01 04:35:51.29Z');
+---------------------------------+
| time('1234-01-01 04:35:51.29Z') |
+---------------------------------+
| 04:35:51.29 |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)
Теперь все в порядке.
Простейшей задачей является заменить Т пространством. Тогда будет работать TIME()
.
mysql> select time(replace('0000-00-00T04:35:51.29Z', 'T', ' '));
+------------------------------------------------+
| time(substring('0000-00-00T04:35:51.29Z', 12)) |
+------------------------------------------------+
| 04:35:51.29 |
+------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
дата часть будет обрабатываться DATE()
, потому что MySQL будет просто игнорировать все остальное.
mysql> select date('2017-02-15T00:00:00.00Z');
+---------------------------------+
| date('2017-02-15T00:00:00.00Z') |
+---------------------------------+
| 2017-02-15 |
+---------------------------------+
1 row in set, 1 warning (0.01 sec)
Вместо того, чтобы хранить отдельные даты и время столбцов, я настоятельно рекомендую вам объединить их в единую datetime
колонну. Особенно, если они должны представлять одно событие (то есть, 4: 35: 51,29, 2017-20-15). Это значительно упростит сравнение, и вы всегда можете извлечь детали даты и времени с помощью DATE()
и TIME()
.
Я рекомендую создать нормализованную структуру таблицы для хранения массива JSON, а затем PHP-скрипт, чтобы переместить все массивы в новую таблицу (ы) и никогда больше не хранить другой массив в базе данных. Конечно, это больше работает впереди, но жизнь будет легче после. – CptMisery
Существует множество преимуществ для хранения данных в новом типе данных JSON MySQL. –