这之前已经问过了,但不是我正在寻找的答案。我以UTC/GMT将所有日期存储在MYSQL中。当我为引用时间的用户提取数据时,最好使用 CONVERT_TZ 构造...
SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table
还是在 Mysql 中临时设置会话区域然后执行普通查询更好?
SET time_zone = usertimezone;
如果我使用第二个,我是否只为每个用户会话执行一次,或者如果我不使用持久打开,我是否需要在每个查询之前设置它?
-
如果您希望MySQL根据当前会话的
time_zone
设置进行转换,请使用TIMESTAMP
。 -
如果要将 UTC 返回到应用程序,请使用
DATETIME
,以便它在那里处理转换。 (这是我的偏好。 -
不要试图混淆这些。
DATETIME
不会对time_zone
设置执行任何操作,并且TIMESTAMP
在返回到应用程序时不能假定为 UTC,除非您绝对确定time_zone
设置为 UTC。
如果你的数据存储在TIMESTAMP
类型的列中,那么你应该SET time_zone
,MySQL将在检索/插入时自动转换为UTC - 你不需要做更多的事情。 这是推荐的方法。