2010-08-10 86 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重啓)