MySQL中时区处理的最佳实践是什么?

Dou*_*ram 6 mysql timezone

之前已经问过这个问题,但不是我要找的答案.我将所有日期存储在UTC/GMT的MYSQL中.当我提取用户参考时间的数据时,最好使用CONVERT_TZ构造...

SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table
Run Code Online (Sandbox Code Playgroud)

或者最好在Mysql中临时设置会话区域然后进行正常查询?

SET time_zone = usertimezone;
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*int 7

  • 使用TIMESTAMP,如果你想MySQL的基础上,做转换time_zone当前会话的设置.

  • 使用DATETIME,如果你正在返回UTC到您的应用程序为它处理转换那里.(这是我的偏好.)

  • 不要试图将它们混合起来. DATETIME不会对time_zone设置执行任何操作,并且TIMESTAMP在将其返回到您的应用程序时不能假定为UTC,除非您绝对确定time_zone设置为UTC.


egg*_*yal 1

如果您的数据存储在TIMESTAMP类型列中,那么您应该SET time_zone在检索/插入时自动与 UTC 进行转换,MySQL 会自动将其转换为 UTC — 您无需执行任何其他操作。这是推荐的方法。