#mysql #mysql-5.7
#mysql #mysql-5.7
Вопрос:
В настоящее время я получаю множество ошибок из более чем одной производственной базы данных, о которых я продолжаю говорить:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2019-03-31 01:49:45' for column 'created_at' at row 1
Это моя таблица:
------------ -------------- ------ ----- ------------------- ----------------
| Field | Type | Null | Key | Default | Extra |
------------ -------------- ------ ----- ------------------- ----------------
| id | int(11) | NO | PRI | NULL | auto_increment |
| log | varchar(255) | YES | | NULL | |
| created_at | timestamp | YES | | CURRENT_TIMESTAMP | |
| updated_at | datetime | YES | | NULL | |
------------ -------------- ------ ----- ------------------- ----------------
версия MySQL:
mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper
Кто-нибудь может помочь мне понять, что происходит?
Обновить:
Я понятия не имею, что произошло, но я получал множество уведомлений от моих мониторов ошибок, и теперь все возвращается к нормальной жизни без каких-либо изменений в коде с моей стороны.
Ошибки начались с: 2019-03-31 01:00:08
И закончилось на: 2019-03-31 01:59:03
ОБНОВЛЕНИЕ 2:
Хорошо, итак, я из Португалии, и сегодня было запланировано изменение национального времени на 1 час, о котором я совершенно забыл…
Я подозреваю, что ошибки были вызваны тем, что мои серверы или моя установка MySQL не синхронизировались с новым временем.
Я оставлю этот вопрос на случай, если кто-нибудь еще столкнется с такой же проблемой
Ответ №1:
Это из-за перехода на летнее время, начиная с этого дня, поэтому все промежутки времени между 1 и 2 часами ночи недопустимы. Вы обнаружите, что проблема на самом деле начинается с ’01:00:00′ и заканчивается ’01: 59: 59′:
create table t (created_at timestamp null default current_timestamp);
insert into t values('2019-03-31 00:59:59');
insert into t values('2019-03-31 01:00:00');
Неверное значение datetime: ‘2019-03-31 01:00:00’ для столбца ‘created_at’ в строке 1
insert into t values('2019-03-31 01:59:59');
Неверное значение datetime: ‘2019-03-31 01:59:59’ для столбца ‘created_at’ в строке 1
insert into t values('2019-03-31 02:00:00');
select * from t
Вывод:
created_at
2019-03-31 00:59:59
2019-03-31 02:00:00
Изменение вашего системного часового пояса на тот, в котором нет перехода на летнее время, решит проблему.
Комментарии:
1. У меня повторилась эта проблема 29 марта 2020 года (2020-03-29), когда в Германии начался переход на летнее время.