2009-06-16 18 views
2

如果您需要您的Web應用程序以每個用戶爲基礎在時區之間進行轉換,那麼爲什麼不在所有日期/時間字段中使用TIMESTAMP?考慮TIMESTAMP值以UTC格式存儲,並在檢索時轉換爲爲連接設置的時區。爲什麼不在整個電路板上使用MySQL的TIMESTAMP?

我在IRC上詢問了這個問題,閱讀了MySQL文檔,廣泛搜索了Google,並詢問了我的同事,但我還沒有找到一個令人信服的理由不使用TIMESTAMP。

注意:我知道TIMESTAMP的有限範圍是1970 - 2038;這對我來說不會是個問題。另外,我正在使用PHP和MySQL。

回答

1

DATETIME適用於您在數據中使用的任意日期和時間。

TIMESTAMP適用於您希望自動更新時間的情況。如果您想知道該行何時插入/更新,請使用TIMESTAMP。

另外,請記住,TIMESTAMP僅以存儲在UTC中 - 在將它作爲查詢的一部分傳回之前,它將轉換爲服務器的本地時區。

就你而言,你最好使用DATETIME。如果您擔心UTC,那很好 - 只需在UTC中創建日期而不是使用當地時間。使用UTC_TIMESTAMP

1

我認爲你的答案就在這裏:

我明白TIMESTAMP有1970年在有限的範圍 - 2038; 這對我來說不會是個問題。

我會關於項目長壽精心打造的假設特別是當它涉及到數據庫架構。在使用它們的應用程序消失之後很久,數據庫就傾向於保持原樣並在使用中。

+1

毫無疑問,MySQL會爲2038年問題發佈一個補丁 - 特別是考慮到絕大多數計算機將在64位之後呢? – 2009-06-16 18:39:19

+2

也許他們會,但成爲一名成功的開發人員的一部分是計劃最糟糕的,而不是最好的希望。 – 2009-06-16 18:50:18

+0

如果弄清楚如何在25年內改變餐桌,將它列入值得花費時間的事物清單上,您的先生的身材將遠遠好於我們大多數人。 – DougW 2012-10-05 00:19:17

0

Randalpho的回答在很多事實上都是錯誤的!

時間戳不需要在創建或更新時自動更新。

此外,時間戳記將轉換爲客戶端的本地時間,而不是serever's。

查看datetime的MySQL文檔。

相關問題