mysql当前时间时区_如何获取MySQL的当前时区?

从手册(

section 9.6):

The current values of the global and client-specific time zones can be retrieved like this:

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

Edit如果MySQL被设置为从系统的时区,上面返回SYSTEM,这是不大有帮助。因为你使用PHP,如果MySQL的答案是SYSTEM,你可以问系统什么时区它使用通过date_default_timezone_get.(当然,如VolkerK指出,PHP可能运行在不同的服务器,但作为假设去,假设Web服务器和它正在说话的DB服务器设置为[如果不是实际上在同一个时区不是一个巨大的飞跃。)但要小心(如同MySQL),你可以设置PHP使用的时区date_default_timezone_set),这意味着它可能报告不同于OS正在使用的值。如果你在控制PHP代码,你应该知道你是否这样做,并且好。

但MySQL服务器使用什么时区的整个问题可能是一个切线,因为要求服务器什么时区它在告诉你绝对没有关于数据库中的数据。阅读详情:

进一步讨论:

如果你在控制服务器,当然可以确保时区是已知的数量。如果您不能控制服务器,则可以按照以下方式设置连接所使用的时区:

set time_zone = '+00:00';

这将时区设置为GMT,以便任何进一步的操作(如now())将使用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()等;它不告诉你任何关于什么时区数据库数据中的日期正在使用。你可以选择假设他们是使用服务器的时区写的,但这个假设可能是有缺陷的。要知道存储在数据中的任何日期或时间的时区,您必须确保它们与时区信息一起存储或(如我所做),确保它们始终为GMT。

为什么假设数据是使用服务器的时区写的?嗯,一方面,数据可能已经使用设置不同时区的连接写入。数据库可能已经从一个服务器移动到另一个服务器,其中服务器在不同的时区(当我继承了一个从德克萨斯搬到加利福尼亚的数据库时,我遇到了)。但即使数据写在服务器上,使用当前的时区,它仍然是不明确的。去年,在美国,夏令时在11月1日凌晨2:00关闭。假设我的服务器在加利福尼亚使用太平洋时区,我在数据库中的值为2009-11-01 01:30:00。那是什么时候?是11月1日PDT凌晨1:30,还是PST(一小时后)的11月1日凌晨1:30?你绝对没有办法知道。道德:始终以GMT(不进行DST)存储日期/时间,并在必要时转换为所需的时区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值