【发布时间】:2011-12-03 23:09:12
【问题描述】:
在我的 Mysql 5.0 DB 中,我有一列来控制 LastUpdated 信息。 Column 是一个时间戳,MySql 自动更新数据。
我正在尝试以 UTC 格式选择此列。
问题是服务器设置为美国日期时间。根据 MySql 文档,数据库以 UTC 存储信息,但是当我想显示信息时,它会将其转换为服务器的时间。
有什么方法可以避免这种转换吗?
【问题讨论】:
在我的 Mysql 5.0 DB 中,我有一列来控制 LastUpdated 信息。 Column 是一个时间戳,MySql 自动更新数据。
我正在尝试以 UTC 格式选择此列。
问题是服务器设置为美国日期时间。根据 MySql 文档,数据库以 UTC 存储信息,但是当我想显示信息时,它会将其转换为服务器的时间。
有什么方法可以避免这种转换吗?
【问题讨论】:
SELECT
CONVERT_TZ(`timestamp_field`, @@session.time_zone, '+00:00') AS `utc_datetime`
FROM `table_name`
我在这里做了一个备忘单:Should MySQL have its timezone set to UTC?
为避免@spencer7593 提到的时间重叠问题,我建议始终以 UTC 格式存储日期
【讨论】:
SELECT CONVERT_TZ('2011-11-06 06:11:00','UTC','US/Central'), CONVERT_TZ('2011-11-06 07:12:00','UTC','US/Central'); 和 SELECT CONVERT_TZ('2011-11-06 01:11:00','US/Central','UTC'), CONVERT_TZ('2011-11-06 01:12:00','US/Central','UTC');
除了更改服务器的默认时区外,还可以通过执行以下 SQL 语句来调整每个连接的时区:
SET time_zone = timezone;
其中 timezone 是时区的名称 (see MySQL docs)。
或者,您也可以使用CONVERT_TZ function 将时间戳转换为不同的时区。
【讨论】:
我需要更改它以在其他内容的末尾添加“Z”(例如 jQuery timeago)知道时间是 UTC:
SELECT
CONCAT(CONVERT_TZ(`timestamp_field`, @@session.time_zone, '+00:00'), 'Z')
AS `utc_datetime`
FROM `table_name`
【讨论】: