2010-08-10 87 views

回答

30

发出以下命令:

SET time_zone = 'America/New_York'; 

(或其他时区GMT + 1:http://www.php.net/manual/en/timezones.php

这是为单个客户端设置MySQL时区的命令,假设您的客户端跨多个时区分布。

该命令应该在涉及日期的每个SQL命令之前执行。如果您的查询通过课程,那么这很容易实现。

+3

这将自动更改日期/吨ime从所有TIMESTAMP字段获得,但不是DATETIME字段。 – 2013-09-26 06:29:50

+0

它不会更改存储在DATETIME或TIMESTAMP字段中的值。 – 2013-09-26 06:36:33

+6

它不适合我。 II得到一个“错误代码:1298.未知或不正确的时区:'America/New_York' ” – user1028741 2014-09-17 14:01:42

3

如果你有SUPER权限,可以在运行时设置全局服务器时区值有这样的说法:

mysql> SET GLOBAL time_zone = timezone; 
+1

如果有没有superadmin特权? – 2014-07-23 07:19:06

+0

只是'SET time_zone = timezone;' – 2016-01-01 00:11:50

18

虽然拜伦的答案是有帮助的,我只想补充一点,他的链接是PHP时区名称,它们与MySQL时区名称不同。

如果您想将单个会话的时区设置为GMT + 1(准确的说是UTC + 1),则只需在该命令中使用字符串“+01:00”即可。即:

SET time_zone = '+01:00';

要查看你的MySQL会话使用的是什么时区,只是执行此:

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

这是更多的细节有很大的参考:MySQL 5.5 Reference on Time Zones

+2

SELECT @@ global.time_zone,@@ session.time_zone,@@ global.system_time_zone; – zzapper 2012-11-01 11:25:50

+1

观察得很好,我刚刚尝试过“America/Sao_Paulo”没有成功... – Lennon 2012-11-14 19:45:13

36

最简单的正如欧麦尔所指出的那样,例如:

mysql> SET GLOBAL time_zone = 'America/New_York'; 

使用指定的时区对于具有日光节约调整的时区很重要。然而,对于一些Linux版本,你可能会得到如下回应:

#1298 - 未知或不正确的时区

如果您看到了这一点,你可能需要运行一个tzinfo_to_sql翻译..这很容易做到,但并不明显。从Linux命令行键入:

mysql_tzinfo_to_sql /usr/share/zoneinfo/|mysql -u root mysql -p 

提供你的root密码(MySQL的root,而不是Linux根),它会在你的时区信息任何定义加载到MySQL。然后,您可以回去和运行

mysql> SET GLOBAL time_zone = timezone; 
+0

谢谢。关于linux端的信息适用于我。 – 2012-07-06 09:07:05

+0

在centOS上完美工作7.1 – ryryan 2015-12-15 19:28:14

+0

Windows上的用户如何获得“#1298 - 未知或不正确的时区”? – DelightedD0D 2016-11-08 04:08:36

5

这里是如何PHP(> = 5.3)和MySQL时区每个会话和用户设置同步。把它放在你需要设置和同步时区的地方。

date_default_timezone_set($my_timezone); 
$n = new \DateTime(); 
$h = $n->getOffset()/3600; 
$i = 60*($h-floor($h)); 
$offset = sprintf('%+d:%02d', $h, $i); 
$this->db->query("SET time_zone='$offset'"); 

其中$ my_timezone是一个在PHP中的时区的列表:http://www.php.net/manual/en/timezones.php

PHP的时区必须转换成小时和分钟为MySQL偏移。这就是第1-4行。

+0

难道你不能用<?= date('P')得到相同的结果吗? ?> – supersan 2015-12-26 17:02:56

1

如果SET TIME_ZONE或SET GLOBAL TIME_ZONE不起作用,你可以如下改变:

  • 更改时区系统,比如:Ubuntu的... $ sudo的dpkg的 - 重新配置 的tzdata

  • 重新启动服务器,也可以重新启动的Apache2和mysql (/etc/init.d/mysql重启)