Ошибка неправильного значения даты и времени MySQL для допустимых дат

#mysql #datetime #timestamp

#mysql #дата и время #временная метка

Вопрос:

У меня есть столбец с меткой времени, и я получаю ошибки при попытке ввести некоторые конкретные даты и время.

Например 2013-03-31 02:13:11 , и 2014-03-31 02:55:00 работает, но 2013-03-31 02:55:00 говорит:

 SQL Error (1292): Incorrect datetime value
  

В чем может быть проблема?

Комментарии:

1. Убедитесь, что вокруг него нет специальных символов.

2. да — между датой и временем есть специальный символ

3. Итак, я погуглил и узнал, что переход на летнее время 2013 года в Румынии начался в 3:00 утра в воскресенье, 31 марта. Может ли это быть проблемой?

4. У меня нет никаких специальных символов. Я просто редактирую его в HeidiSQL вручную.

5. @SalmanA Это имеет смысл. Я думаю, что это может быть причиной.

Ответ №1:

Это может быть проблемой перехода на летнее время, особенно когда вы упоминаете, что проблема с датой вызывает 2013-03-31 02:55:00 … дата, с которой большинство европейских стран начали соблюдать летнее время за 2013 год. Время в Центральной Европе было увеличено на один час в 2 часа ночи, что означает, что 02:55:00 в тот день не было!

Обратите внимание, что MySQL преобразует TIMESTAMP значения из текущего часового пояса в UTC для хранения, и именно здесь возникает ошибка:

 SET time_zone = 'CET';
-- Central Europe Time in 2013: DST starts at 2am when clocks move forward to 3am
-- see https://www.timeanddate.com/news/time/europe-starts-dst-2013.html

INSERT INTO test(timestamp_col) VALUES('2013-03-31 01:59:59');
-- Affected rows: 1  Found rows: 0  Warnings: 0  Duration for 1 query: 0.078 sec.

INSERT INTO test(timestamp_col) VALUES('2013-03-31 02:00:00');
-- SQL Error (1292): Incorrect datetime value: '2013-03-31 02:00:00' for column 'timestamp_col' at row 1

INSERT INTO test(timestamp_col) VALUES('2013-03-31 03:00:00');
-- Affected rows: 1  Found rows: 0  Warnings: 0  Duration for 1 query: 0.063 sec.
  

Комментарии:

1. Это имеет смысл. Но странно, что 2:13 работает, а 2:55 — нет.