Просто пришлось перенести базу данных sql с одного сервера на другой
Я понимаю, что поле метки времени в MYSQL хранится как 4-байтовое целое число (независимо от часового пояса) и представляется пользователю в нем текущая настройка часового пояса сервера (сервера mysql)
Я прав?
Сейчас. Когда в октябре время меняется с летнего времени на зимнее время в Европе (UTC + 2 до UTC + 1), время пересекается на один час.
Это имеет смысл и не является проблемой, потому что мы «знаем», что сервер знает разницу, потому что он хранит их в метке времени unix utc.
Я все еще прав?
Теперь, когда я переместил свой экспорт базы данных из одной базы данных в другую, поле отметки времени перемещается не как целое число, а как читаемая человеком строка времени:
просто образец:
(1,'AAAA01',6.50,NULL,NULL,NULL,'2017-07-28 17:38:16',0,NULL,NULL,NULL,NULL,0,NULL),
(2,'AAAA01',6.50,NULL,NULL,NULL,'2017-07-28 20:00:00',1,NULL,NULL,NULL,NULL,0,NULL),
(3,'AAAA01',6.00,NULL,NULL,NULL,'2017-07-28 21:39:07',0,NULL,NULL,NULL,NULL,0,NULL),
(4,'AAAA01',5.50,NULL,NULL,NULL,'2017-07-28 21:42:15',0,NULL,NULL,NULL,NULL,0,NULL),
(5,'AAAA01',5.00,NULL,NULL,NULL,'2017-07-29 12:55:48',0,NULL,NULL,NULL,NULL,0,NULL),
Вы можете увидеть это поле:
`received` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
но хранится как удобочитаемое поле.
Как получающий сервер узнает, находится ли это поле до или после изменения времени (в октябре)
Смена времени происходит 2 раза в год. Весной она идет вперед на один час, поэтому не возникает путаницы, поскольку разрыв составляет всего один час, а осенью она идет назад и «перезаписывает» тот же час.
Преобразование часового пояса
Как сервер Mysql может даже дать ответ на это время, поскольку он представляет 2 разных времени:
SELECT CONVERT_TZ («2018-10-28 02:40», «Европа / Париж», «UTC»)