6

以前有人问过这个问题,但不是我正在寻找的答案。我将所有日期存储在 UTC/GMT 的 MYSQL 中。当我为引用时间的用户提取数据时,最好使用 CONVERT_TZ 构造...

SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table

还是在Mysql中临时设置session zone,然后进行正常查询比较好?

SET time_zone = usertimezone;

如果我使用第二个,我是否只为每个用户会话执行一次,或者如果我不使用持久打开,我是否需要在每次查询之前设置它?

4

2 回答 2

9
  • TIMESTAMP如果您希望 MySQL 根据time_zone当前会话的设置进行转换,请使用。

  • 如果DATETIME您将 UTC 返回到您的应用程序以便它在那里处理转换,请使用此选项。(这将是我的偏好。)

  • 不要试图混淆这些。 DATETIME不会对time_zone设置做任何事情,并且TIMESTAMP当它返回到您的应用程序时不能假定为 UTC,除非您绝对确定time_zone设置为 UTC。

于 2013-10-08T18:10:52.473 回答
2

如果您的数据存储在TIMESTAMP类型列中,那么您应该SET time_zone并且 MySQL 将在检索/插入时自动转换为 UTC 或从 UTC 转换——您无需再做任何事情。这是推荐的方法。

于 2013-10-08T17:54:43.067 回答