我有一个用户可以发表评论的论坛。当创建注释时,其对应的日期时间值以UTC格式存储。
我打算以当地时间显示数据,例如'ASIA/SINGAPORE';
2选项:
- 每次查询数据库时使用
convert_tz
。我不喜欢方法,因为它使我每次查询都要重写select_expr
。 - 使用
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 = ...))