2012-05-01 31 views
1

假設如下表:MySQL和時區

CREATE TABLE IF NOT EXISTS `test` (
    `stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

當我運行的SQL語句:

SET time_zone = '+00:00'; 
INSERT INTO `test` (`stamp`) VALUES (CURRENT_TIMESTAMP); 

test值是我的機器的本地時間而不是UTC。

根據MySQL的site

爲TIMESTAMP列中的值是從當前時區 轉換爲UTC用於存儲,並從UTC到當前時區 檢索。

我在做什麼錯?我想用UTC日期/時間戳存儲我的記錄,並在用戶的本地時區中檢索它們。

+0

「我想用UTC日期/時間戳存儲我的記錄,並在用戶的本地時區中檢索它們。」 ---如果你使用時間戳 - mysql會自動完成。你不應該在乎如何存儲日期,你只需要與它在所需時區返回的事實 – zerkms

+0

雖然哪個時區?我會假設MySQL正在使用服務器的時區。我的用戶將不會與我的服務器處於同一時區。我想我不需要告訴MySQL在某個時區給我返回值。相反,我只是接受它在我的服務器的時區,並從那裏做轉換? – StackOverflowNewbie

+0

想知道如何做這樣的事情:獲取用戶時區中下午3點到5點之間的所有記錄。 – StackOverflowNewbie

回答

0

根據使用TIMESTAMP數據類型的MySQL 5.5文檔,將默認使用服務器的時區,除非您更改客戶端的變量。

來源:http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

每個連接的時區。每個連接的客戶端都有自己的時間 區域設置,由session time_zone變量給出。最初, 會話變量的值取自全局time_zone變量 ,但客戶端可以使用以下語句更改自己的時區:

mysql> SET time_zone = timezone;

+0

因此,不需要設置時區。只需使用時間戳?它不會將服務器的時間轉換爲UTC和UTC到服務器的時間嗎?我需要它從客戶端的時間轉換爲UTC和UTC到客戶端時間(其中客戶端時區是我的應用程序中用戶指定的值)。 – StackOverflowNewbie

+0

然後,我將服務器time_zone設置爲UTC時間。 –