【问题标题】:How to correctly set mysql timezone如何正确设置mysql时区
【发布时间】:2012-01-16 01:39:21
【问题描述】:

我有一个关于 mysql 时区的奇怪问题。

在我的网站配置文件中,我有这行设置时区:

mysql_query("SET SESSION time_zone = '$offset';"); // Offset is properly calculated, no worries about that

有趣的是,如果我像这样在此之后添加另一行:

$q = mysql_query("SELECT NOW() as now");
$row = mysql_fetch_array($row);
echo $row["now"];

执行该代码后,时间显示正确。

但是,在其他一些查询中,我在具有名为 date 的列的表中插入行,该列默认为 CURRENT_TIMESTAMP。

这样插入行:

INSERT INTO `sessions` (`user_id`) VALUES `1`

(会话表有一个date 列,默认为 CURRENT_TIMESTAMP)

但是插入到数据库中的值仍然指向服务器的时区:((

任何想法如何解决这个问题?

【问题讨论】:

  • 当你说插入数据库的值指向服务器时区时,你如何检查?还通过您使用SET SESSION time_zone 技巧的连接?
  • 你在运行INSERT之前关闭连接吗?
  • 我在 phpMyAdmin 上检查它,直到脚本执行结束才关闭连接
  • 在显示 phpMyAdmin 时是否可能是转换回来的任何线索?

标签: php mysql timezone


【解决方案1】:

你要明白MySQL维护多个时区设置:

  • 系统时区(基本上是操作系统设置的时区)
  • 服务器时区(MySQL使用的时区)
  • 客户端时区(每个连接使用的会话时区)

详情请见http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

日期/时间值以两种不同的方式存储:

  • 所有基于 unix 时间戳的值始终以 UTC 格式存储。当它们被存储和读取时,它们会在内部动态地从客户端时区转换到客户端时区。 NOW() 和 CURTIME() 函数也是如此,因为它们是基于时间戳的。
  • DATE、TIME 和 DATETIME 列(以年-月-日时-分-秒格式存储它们的值)不受时区设置的影响,并且永远不会转换。

从上面可以清楚地看出,当您从基于 unix 时间戳的列中读取时看到的值不一定是真正存储在数据库中的值。它们使用服务器时区和客户端时区进行转换。如果您不了解机制的细节,结果可能会令人困惑。

对于第一次测试,尝试通过执行来找出每个客户端程序中的当前设置

SELECT @@global.time_zone, @@session.time_zone;

全球时区将始终相同。但是会话时区可能因客户端应用程序而异,并且会改变您的读写操作的结果。

【讨论】:

  • 谢谢,确实很受启发!我意识到 phpMyAdmin 正在显示转换为服务器时区的时间,但是如果我在设置会话时区后从脚本中的数据库中读取它们,它们会正确显示,所以只是 phpMyAdmin 让我感到困惑:)
  • @DanyKhalife 感谢您对此发表评论,以为我疯了。
  • @Jpsy Greate answer..我有疑问如何在 mysql confiq 文件中设置客户端时区???
  • @goodyzain 无法在配置中设置客户端时区。它是基于每个会话确定的。见the MySQL docsPer-connection time zones. Each client that connects has its own time zone setting, given by the session time_zone variable. Initially, the session variable takes its value from the global time_zone variable, but the client can change its own time zone with this statement: mysql> SET time_zone = timezone;
猜你喜欢
  • 2019-05-28
  • 2023-03-21
  • 2023-04-03
  • 2020-10-17
  • 2020-10-17
  • 2013-11-16
  • 1970-01-01
  • 2013-05-20
  • 2012-09-21
相关资源
最近更新 更多