MySQL:自动将UTC映射到本地时区

时间:2011-07-15 17:04:49

标签: mysql datetime timezone convert-tz

我有一个用户可以发表评论的论坛。创建注释时,其对应的日期时间值以UTC格式存储。

我打算在当地时间提供数据,比如'ASIA / SINGAPORE';

2个选项:

  1. 每次查询数据库时都使用convert_tz。我不喜欢 方法,因为它使我每次查询都重写select_expr
  2. 使用SET time_zone = 'ASIA/SINGAPORE';
  3. 至于第二个选项,我想知道命令的有效范围是什么(这里没有超级特权)。更具体地说,如果我正在使用php应用程序,配置是否因为我关闭数据库连接而无效?我应该每次查询数据库时发出命令吗?

    TNX。

1 个答案:

答案 0 :(得分:3)

MySQL变量的作用域在连接中(最低级别,在libmysql< - > mysqld之间)。这意味着,如果PHP本身或某些应用程序库使用任何类型的mysql连接池,那么你可以观察到这个变量消失(因为不可见的连接切换),并且变量肯定会在断开连接后消失。

如果您不满意重写您的查询,您可能可以动态选择合适的tz名称 - 例如,形成一个用户表,只要您拥有已登录用户的ID,如下所示:

SELECT convert_tz( ..., ..., (select user_tz from users where user_id = ...))