SQLSTATE [22007]: Недопустимый формат datetime: 1292 Неверное значение datetime: ‘2019-03-31 01:52:25’

#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), когда в Германии начался переход на летнее время.