我有一个论坛,用户可以在其中发表评论。创建评论时,其相应的日期时间值将以 UTC 格式存储。
我打算以本地时间呈现数据,例如“ASIA/SINGAPORE”;
2 个选项:
- 每次查询数据库时都使用
convert_tz
。我不喜欢 方法,因为它让我每次查询时都重写select_expr
。 - 使用
SET time_zone = 'ASIA/SINGAPORE';
对于第二个选项,我想知道该命令的有效范围是多少(这里没有 super 权限)。更具体地说,如果我使用 php 应用程序,当我关闭数据库连接时配置是否无效?我应该在每次查询数据库时发出命令吗?
Tnx。
最佳答案
MySQL 变量的作用域是连接(最低级别,libmysql <-> mysqld 之间)。这意味着,如果PHP本身或某些应用程序库使用任何类型的mysql连接池,那么您可以观察到该变量消失(因为不可见的连接切换),并且该变量在断开连接后肯定会消失。
如果您不乐意重写查询,您可能可以即时选择适当的 tz 名称 - 例如,形成一个用户表,只要您有登录用户的 ID,如下所示:
SELECT convert_tz( ..., ..., (select user_tz from users where user_id = ...))
关于MySQL:UTC 到本地时区的自动映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6710647/