2

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

我打算以当地时间呈现数据,例如“亚洲/新加坡”;

2个选项:

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

至于第二个选项,我想知道命令的有效范围是什么(这里没有超级权限)。更具体地说,假设我使用的是 php 应用程序,当我关闭数据库连接时,配置是否会变得无效?每次查询数据库时我应该发出命令吗?

肿瘤坏死因子。

4

1 回答 1

3

MySQL 变量的范围在连接中(最低级别,在 libmysql <-> mysqld 之间)。也就是说,如果 PHP 本身或者某个应用程序库使用了任何一种 mysql 连接池,那么你可以观察到这个变量消失了(因为不可见的连接切换),并且断开后这个变量肯定会消失。

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

SELECT convert_tz( ..., ..., (select user_tz from users where user_id = ...))
于 2011-07-15T17:22:01.653 回答