Мне нужно преобразовать некоторые поля TIMESTAMP в INT в нашей базе данных MySQL (InnoDB). Я понимаю, что преобразование TIMESTAMP в INT необычно, но нам все равно нужно это делать :)Mysql преобразование TIMESTAMP в INTEGER - timezones
Это кажется достаточно прямым, но есть некоторые ошибки в часовом поясе и летнее время.
У меня есть сценарий, который генерирует мой SQL-код за столбец. Например, он генерирует:
ALTER TABLE alarmLog ADD COLUMN started_tmp INT UNSIGNED;
UPDATE alarmLog SET started_tmp = UNIX_TIMESTAMP(started);
ALTER TABLE alarmLog DROP started;
alter TABLE alarmLog CHANGE started_tmp started INT UNSIGNED NULL DEFAULT 0;
Если сравнивать до и после того, как данные с помощью select FROM_UNIXTIME(1291788036);
, результат выглядит хорошо.
Идея состоит в том, чтобы изменить все клиентское программное обеспечение для преобразования в UTC и использовать этот INT при его хранении. При извлечении этот INT преобразуется в текущий часовой пояс.
Но тогда Docs warn me об этом сценарии (декретное в КЭТ):
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 02:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 03:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
Как API и ОС обычно имеют дело с экономией дневного света? Я знаю, что мой компьютер имеет часы в UTC, а в летнее время ОС добавляет ему два часа, а зимой - один. Я предполагаю, что он использует время UTC, чтобы определить, является ли это DST или нет.
Итак, как мне с этим справиться? Является единственным решением для добавления поля в базу данных для задания смещения DST?
Летнее время - это другой часовой пояс. Например. CET - центральноевропейское время, CEST - центральноевропейское летнее время. Ваша ОС знает, когда нужно переключаться. До тех пор, пока вы используете UTC для временных меток, до уровня представления нужно преобразовать его в локальное время. –