开发者社区 问答 正文

如何获取MySQL的当前时区?

有人知道MySQL中是否有这样的功能吗?

更新

这不会输出任何有效的信息:

mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | SYSTEM | +--------------------+---------------------+ 或者也许MySQL本身不知道确切time_zone使用了什么,那很好,我们可以PHP在这里介入,只要我能获得不像SYSTEM...

展开
收起
保持可爱mmm 2020-05-10 21:29:18 587 分享 版权
1 条回答
写回答
取消 提交回答
  • no change! +---------------------+ 1 row in set (0.00 sec)

    mysql> select now(); +---------------------+ | now() | +---------------------+ | 2010-05-29 10:32:32 | +---------------------+ 1 row in set (0.00 sec)

    mysql> set time_zone = '+00:00'; Query OK, 0 rows affected (0.00 sec)

    mysql> select now(); +---------------------+ | now() | +---------------------+ | 2010-05-29 08:32:38 | <== Note, it changed! +---------------------+ 1 row in set (0.00 sec) 因此,了解服务器的时区是在该获取时间功能方面唯一重要的权利,比如now(),unix_timestamp()等; 它不会告诉您数据库数据中的日期正在使用哪个时区。您可能会选择假设它们是使用服务器的时区编写的,但是这种假设很可能是有缺陷的。要知道数据中存储的任何日期或时间的时区,您必须确保它们与时区信息一起存储,或者(就像我一样)确保它们始终位于格林尼治标准时间。

    为什么假设数据是使用服务器的时区写入的?好吧,一方面,数据可能是使用设置了不同时区的连接写入的。该数据库可能已从一台服务器移至另一台服务器,其中服务器位于不同的时区(当我继承从德克萨斯州移至加利福尼亚州的数据库时遇到了这种情况)。但是,即使将数据写入服务器(具有当前时区),它仍然是模棱两可的。去年,在美国,夏令时于11月1日凌晨2:00被关闭。假设我的服务器使用太平洋时区在加利福尼亚州,我有这个价值2009-11-01 01:30:00在数据库中。那是什么时候?是太平洋标准时间11月1日凌晨1:30,还是太平洋标准时间11月1日凌晨1:30(一个小时后)?您绝对无法知道。道德:始终将日期/时间存储在GMT中(不执行DST),并在必要时将其转换为所需的时区。来源:stack overflow

    2020-05-10 21:29:37
    赞同 展开评论