栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获取MySQL的当前时区?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获取MySQL的当前时区?

从手册(第9.6节):

可以按以下方式检索全局时区和特定于客户时区的当前值:

mysql> SELECt @@global.time_zone, @@session.time_zone;

编辑

SYSTEM
如果MySQL设置为系统时区的从属,则以上内容将返回,没有帮助。由于您使用PHP,如果从MySQL的答案是
SYSTEM
,你可以接着问什么时区系统

通过使用
date_default_timezone_get
。(当然,正如VolkerK指出的那样,PHP可能在不同的服务器上运行,但是按照假设,假设要与之通信的Web服务器和DB服务器 设置为
[如果实际上不在同一时区 ] 巨大的
飞跃。)但要注意(如MySQL的),你可以设置时区PHP使用(
date_default_timezone_set
),这意味着它可能报告的值与操作系统正在使用的值不同。如果您可以控制PHP代码,则应该知道自己是否正在这样做,并且可以。

但是关于MySQL服务器使用哪个时区的整个问题可能是切线,因为询问服务器它所在的时区 绝对不会 告诉您关于数据库中数据的 任何
信息。继续阅读以获取详细信息:

进一步讨论

当然,如果您控制服务器,则可以确保时区为已知数量。如果您不受服务器的控制,则可以这样设置 连接 使用的时区:

set time_zone = '+00:00';

这样

now()
会将时区设置为GMT,以便任何进一步的操作(如)都将使用GMT。

但是请注意,时间和日期值 不会 与时区信息一起存储在MySQL中:

mysql> create table foo (tstamp datetime) Engine=MyISAM;Query OK, 0 rows affected (0.06 sec)mysql> insert into foo (tstamp) values (now());Query OK, 1 row affected (0.00 sec)mysql> set time_zone = '+01:00';Query OK, 0 rows affected (0.00 sec)mysql> select tstamp from foo;+---------------------+| tstamp   |+---------------------+| 2010-05-29 08:31:59 |+---------------------+1 row in set (0.00 sec)mysql> set time_zone = '+02:00';Query OK, 0 rows affected (0.00 sec)mysql> select tstamp from foo;+---------------------+| tstamp   |+---------------------+| 2010-05-29 08:31:59 |      <== Note, 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-0101:30:00
在数据库中。那是什么时候?是太平洋标准时间11月1日凌晨1:30,还是太平洋标准时间11月1日凌晨1:30(一个小时后)?您绝对无法知道。道德:始终将日期/时间存储在GMT中(不执行DST),并在必要时将其转换为所需的时区。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/400661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号