以前曾经问过这个问题,但不是我要找的答案。我将所有日期存储在UTC / GMT的MYSQL中。当我用户提取数据时,引用时间最好是使用CONVERT_TZ构造......
SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table
或者最好在Mysql中临时设置会话区域然后进行正常查询吗?
SET time_zone = usertimezone;
如果我使用第二个,我是否只为每个用户会话执行一次,或者如果我没有使用持久打开,是否需要在每次查询之前设置它?
答案 0 :(得分:7)
如果您希望MySQL根据当前会话的TIMESTAMP
设置进行转换,请使用time_zone
。
如果要将UTC返回给您的应用程序以使其处理转换,请使用DATETIME
。 (这是我的偏好。)
不要试图将它们混合起来。对于DATETIME
设置,time_zone
不会执行任何操作,并且TIMESTAMP
在返回到您的应用程序时不能被视为UTC,除非您完全确定time_zone
已设置到UTC。
答案 1 :(得分:2)
如果您的数据存储在TIMESTAMP
类型列中,那么您应该SET time_zone
并且MySQL将在检索/插入时自动转换为/从UTC转换 - 您不需要再执行任何操作。这是推荐的方法。