2013-05-07 48 views
0

我正在共享主機,因此我無法訪問mysql配置文件。更新故事中的MySQL時區差異

該系統的默認時區是'America/New_York',但我需要爲我的數據庫使用UTC -5:00。

每次我執行查詢的時區設置爲UTC -5:00這樣的:

SET time_zone='-5:00'; 

如果我想當前的時間,SELECT NOW()返回正確的時間和日期,但更新當一個表MySQL使用系統的時間,而不是設定時區

UPDATE administradores SET ultimo_acceso=NOW() WHERE id=1 

爲什麼這些值是不同的?因爲我重寫了時區,所以在這兩個查詢中都不應該是同一時間?

我也嘗試過使用INSERT語句,並且工作正常。

+0

我不確定,但是當您在本地設置某些內容時,我認爲您需要將其設置爲全局http://dev.mysql.com/doc/refman/5.5/en//time -zone-support.html查看該URL – jcho360 2013-05-07 16:41:56

+0

「America/New_York」的夏季時間爲UTC-05:00,UTC-04:00。你確定要禁用DST嗎?另外 - ultimo_accesso的確切數據類型是什麼? – 2013-05-07 16:53:30

+0

@MattJohnson是的,我想使用其實墨西哥城時區,我認爲這是美國中部時間。 ultimo_acceso是一個時間戳 – 2013-05-07 16:55:03

回答

1

如果ultimo_acceso字段的類型爲TIMESTAMP,那麼該值實際上將存儲爲UTC,然後在您選擇該值時將其轉換回當前時區。所以你需要在select語句中重新設置時區。

如果您使用的是DATETIME數據類型,則您設置的值應該保留而不進行轉換,並且無論選擇時的時區設置如何,您都將準確找回所存儲的內容。

See the MySQL docs on this subject

+0

你是對的數據庫的價值是作爲SYSTEM時區存儲的,但是當用不同的時區查詢時,更改已完成。 – 2013-05-07 17:28:47

+0

這將是一個直接在數據庫上工作的問題,但使用PHP應該沒有問題。謝謝 – 2013-05-07 17:31:35

+0

@JorgeZapata - 它實際上存儲在UTC。只是如果你沒有自己設置系統時區是默認的。 – 2013-05-07 19:14:41

0

請注意,無論time_zone變量的值如何,請注意DATETIME,DATETIME字段將始終返回您放入它們的確切時間。

TIMESTAMP領域會自動他們的值轉換成由time_zone變量指定的時區。

+0

我使用TIMESTAMP字段,不應該使用SESSION time_zone值? – 2013-05-07 17:19:50