MySQL Хранение Datetime в Местном времени навсегда и всегда

mysql datetime

665 просмотра

3 ответа

219 Репутация автора

Я храню метки времени фото в базе данных MySQL. В настоящее время мой столбец установлен в:

CREATE TABLE `photos` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `camname` varchar(45) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `time` time DEFAULT NULL,
  PRIMARY KEY (`ID`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Дата и время представляют собой местное время, когда был сделан снимок, о чем свидетельствует отметка времени, напечатанная на изображении. Поэтому 10:45 всегда будет, и всегда должно быть 10:45, независимо от того, в каком часовом поясе я получаю или манипулирую этими данными.

Это жизненно важно для анализа - мы смотрим на время, когда происходят события. Сколько дней прошло и т. Д. Знание того, когда это произошло в связи с местным временем, не имеет значения и бесполезно.

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


Связанный: я должен использовать поле 'datetime' или 'timestamp'?

На что, я думаю, есть ответ: С DATETIME то, что вы вводите, это то, что вы получаете. 2015-01-23 12:45:34 ВСЕГДА будет 2015-01-23 12:45:34, хотя TIMESTAMP будет отображаться по-разному на локальных отчетах, DATETIME - нет.

Однако, следуя советам некоторых комментариев, представляется целесообразным включить часовой пояс, чтобы через некоторое время кто-то мог знать, к какому часовому поясу относится DATETIME. (Если они должны заботиться).

Автор: Trees4theForest Источник Размещён: 19.07.2016 04:58

Ответы (3)


1 плюс

89 Репутация автора

Поскольку сервер преобразует все временные метки в серверное время, а вам нужно местное время, представляется необходимым сохранить часовой пояс в отдельном столбце.

Я бы порекомендовал хранить время в UTC и часовой пояс в виде целого числа +/- UTC в минутах. Хотя это потребует дополнительной обработки, оно позволяет хранить данные, которые вам необходимо хранить, в достаточно согласованном порядке.

Обратите внимание, что вы не должны хранить часовой пояс, VARCHAR(32)например Asia/Riyadh. Это связано с тем, что при этом не учитывается переход на летнее время, поэтому время может быть на час меньше.

Автор: areke Размещён: 19.07.2016 05:43

0 плюса

1591 Репутация автора

mysql получает отметку времени сервера, а не отметку времени клиента, если вам нужно хранить данные, время зависит от отметки времени клиента, которую необходимо отправить в запросе

Автор: tapos ghosh Размещён: 19.07.2016 05:46

0 плюса

219 Репутация автора

Решение

С DATETIME то, что вы вводите, это то, что вы получаете: 2015-01-23 12:45:34ВСЕГДА будет2015-01-23 12:45:34

С TIMESTAMP MySQL записывает в секундах с начала эпохи (момент времени) и будет отображаться по-разному на локальных клиентах

Однако, следуя советам некоторых комментариев, представляется целесообразным включить часовой пояс, чтобы через некоторое время кто-то мог знать, к какому часовому поясу относится DATETIME. (Если они должны заботиться).

Автор: Trees4theForest Размещён: 28.07.2016 07:23
Вопросы из категории :
32x32