2009-06-03 34 views
38

我想讓它在MySQL查詢中調用NOW()和CURDATE()以UTC來返回日期。如何在沒有通過並更改所有使用這些函數的查詢的情況下實現此目的?如何讓MySQL的NOW()和CURDATE()函數使用UTC?

+9

不是你要求什麼,但有時它更好地使用UTC_TIMESTAMP() – 2013-08-01 13:42:14

+0

這可能會幫助你:http://stackoverflow.com/questions/19023978/should-mysql-have-its-timezone-set -to-utc – 2014-08-29 10:58:13

+0

這個怎麼樣:http://w3resource.com/mysql/date -and-time-functions/mysql-utc_timestamp-function.php – zx1986 2017-02-18 10:20:53

回答

33

終於找到了我一直在尋找...

在my.cnf中,

[mysqld_safe] 
timezone = UTC 

我把這個選項放在[mysqld]下,並且mysql無法啓動。

調用「SET time_zone ='+ 0:00';」在每個頁面加載也將工作,但我不喜歡在每個頁面加載調用該查詢的想法。

23

將服務器的時鐘設置爲UTC。不完全是。

如果你能做到,就做吧。

其中最令人頭疼的是「cron」工作等,在當地時區運行,這意味着一些cron工作將每年錯過一次,其餘所有時間在格林尼治標準時間不同的時間運行半年我假設你在這裏有夏令時的時區)。

MySQL有時區支持,但它是瘋了,搞砸了。如果你不需要,不要使用它。只需將服務器的時鐘設置爲UTC,時間將開始工作。

我知道更改服務器時鐘對任何託管系統都是一個重大變化,並且您可能會有大量可能受到影響的服務器和服務,但請嘗試繼續操作。質量保證工作可能很重要,但請嘗試。

+0

我以前讀過這個,想知道你在開發時做了什麼?您是否將開發PC的時間設置爲UTC? – 2012-06-23 13:14:53

+5

您在虛擬機中開發,並將虛擬機時鐘設置爲UTC。永遠不要在臺式機上開發,這在很多方面都是很痛苦的,特別是如果它是由企業IT部門管理的Windows PC,它可以隨心所欲地通過組策略隨意更改配置。 – MarkR 2012-06-23 14:25:06

0

您將需要使用SET TIMESTAMP語句以所需格式格式化日期時間結果。這將意味着改變所有這些查詢。儘管sysdate()不會服從。

4

正確的做法是將服務器的時區更改爲UTC,就像MarkR所說的那樣。

但是,也可以使用SET time_zone更改當前會話的時區。

從手冊:

當前會話時區設置影響顯示和那些區敏感的時間值的存儲。這包括(),如現在的功能顯示的值或CURTIME()

12

轉到/etc/mysql/my.cnf文件和下的[mysqld]部分

默認時區添加此以下行= '00:00'

然後,重新啓動你的mysql。現在選擇curtime();顯示GMT時間。

7

如果改變你的跑步生產服務器的時區或更新的關鍵配置設置並重新啓動mysql的似乎是不現實的和/或矯枉過正,試試這個:

CONVERT_TZ(NOW(), 'US/Pacific', 'UTC') 

哪裏US/Pacific是您NOW()調用返回時區時間英寸