2010-11-13 66 views
3

我使用的是PHP/MySQL,我一直使用DATETIME來存儲createdupdated值,但我想這可能是一種更好的方法。TIMESTAMP與DATETIME for`created`和`updated`列

我應該使用TIMESTAMP嗎?如果是這樣,爲什麼?

+2

可能重複的[日期時間vs時間戳?](http://stackoverflow.com/questions/409286/datetime-vs-timestamp) – 2010-11-13 18:59:02

回答

1

The documentation狀態:

時間戳值是從當前時區轉化爲UTC用於存儲,和從UTC轉換回當前時區進行檢索。 (這僅出現在TIMESTAMP數據類型中,而不是其他類型,如DATETIME。)默認情況下,每個連接的當前時區是服務器的時間。如第9.6節「MySQL服務器時區支持」中所述,時區可以基於每個連接進行設置。只要時區設置保持不變,您可以恢復您存儲的相同值。如果您存儲TIMESTAMP值,然後更改時區並檢索該值,則檢索到的值與您存儲的值不同。發生這種情況是因爲同一時區未用於雙向轉換。當前時區可用作time_zone系統變量的值。

因此,如果您希望將日期/時間存儲爲UTC而不是當前時區,則可能需要使用TIMESTAMP

+0

根據你的回答,可以安全地說,在處理時區時,DateTime類型將該職責傳遞給業務邏輯,而TimeStamp類型將該職責傳遞給服務器時間(或取決於操作系統中的設置)?從某種意義上說,不應該把正確的答案作爲日期時間,因爲我們程序員將更好地控制UTC的存儲時間,而不考慮操作系統中的設置? – Antony 2011-06-24 19:21:22

0

時間戳以UTC時間存儲在數據庫中。然後,根據您的時區設置,您隨時可以自動調整偏移。如果您關心爲應用程序設置時區,那麼一定要使用時間戳。