Как установить столбец отметки времени, значением по умолчанию которого является текущее время UTC?
MySQL использует UTC_TIMESTAMP()
функцию для отметки времени UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Итак, я попробовал:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
И другие варианты, вроде бы UTC_TIMESTAMP()
, но безуспешно.
CURRENT_TIMESTAMP
?MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval.
CURRENT_TIMESTAMP
). Из одной и той же страницы документации:(This does not occur for other types such as DATETIME.)
.Ответы:
Чтобы согласиться с комментарием @ ypercube, который
CURRENT_TIMESTAMP
хранится как UTC, но извлекается как текущий часовой пояс, вы можете повлиять на настройку часового пояса вашего сервера с параметром --default_time_zone для получения. Это позволяет вашему поиску всегда быть в UTC.По умолчанию опция «SYSTEM» - это то, как установлен часовой пояс вашей системы (который может быть или не быть UTC!):
Вы можете установить это динамически:
Или постоянно в вашем my.cnf:
Перезагрузите сервер, и вы увидите изменения:
источник
default_time_zone
для конкретной таблицы или базы данных? Спасибо.Вы не можете указать
UTC_TIMESTAMP
по умолчанию, чтобы указать автоматические свойства, Вы должны использовать только DEFAULTCURRENT_TIMESTAMP
иON UPDATE CURRENT_TIMESTAMP
предложения.Также вы можете вставить
UTC_TIMESTAMP
значения, как это, хотя для таблицы:Запрос INSERT должен быть таким, чтобы вставить UTC_TImeSTAMP:
источник
Мое решение с триггером:
Тогда каждая новая вставленная строка будет иметь метку времени в формате UTC.
источник
для mariadb работали только глобальные решения my.cnf
для mariadb 10.2 - постоянное решение @Derek Downey в этом посте.
для mariadb 10.0 (у меня было 10.0.32), см. https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
оба определения могут сосуществовать в my.cnf mariadb 10.2, но у меня больше нет mariadb 10.0.
Надеюсь, что это поможет вам.
источник