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



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

我打算以当地时间显示数据,例如'ASIA/SINGAPORE';

2选项:

  1. 每次查询数据库时使用convert_tz。我不喜欢方法,因为它使我每次查询都要重写select_expr
  2. 使用SET time_zone = 'ASIA/SINGAPORE';

对于第二个选项,我想知道这个命令的有效范围是什么(这里没有超级特权)。更具体地说,如果我使用一个PHP应用程序,配置无效,因为我关闭数据库连接?每次查询数据库时都应该发出这个命令吗?

Tnx .

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

如果您不喜欢重写查询,您可能可以动态地选择合适的tz名称——比如,形成一个用户表,只要您有登录用户的id,就像这样:

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

最新更新