2013-06-27 44 views
0

快速的問題,我無法找到一個很好的答案。當我開始使用PHP和MySQL時,我學會了將日期/時間存儲爲Unix時間戳。 mySQL數據類型是BIGINT,PHP的日期函數在處理這個問題方面做了很多工作。當我查看文檔時,Timestamp數據類型似乎變得更加突出。存儲日期過期的BIGINT方式是什麼?是否有一個普遍的思想觀點,現在更好地使用這些方法中的哪一種?在mySQL中存儲日期的數據類型

我知道時間戳數據類型有'當前時間戳'的默認值或更新是很好的。

想法?

在此先感謝

+0

還有DATE和DATETIME數據類型,我通常使用其中之一。 – Barmar

回答

1

主要論點我想給的是,這個數據類型是專爲工作。

timestamp的一個優點是軟件知道這個數字確實是一個日期並且會顯示一個人類可讀的日期。當您將日期存儲爲int s時,這總是一個問題。

有一點要記住,雖然是timestamp不適用於1970年1月1日之前的日期,但這與int方法沒有什麼不同。

+0

感謝您的輸入。技術上INT在1970年以前的工作,如果你允許簽名ints,但我很少這樣做。這引發了另一個問題,但。我使用BIGINT,因此2038的上限不會影響我。 /時間戳將如何處理? –

+0

從dev.mysql.com開始> _TIMESTAMP的範圍爲'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC._ - 我會假設當需要出現他們會找到一種方法來增加上限。如果你擔心另一個千年蟲,你可以在25年內擔心它。 – Halcyon

1

Andrew,你不應該使用任何種類的INT數據類型來保存日期。 MySQL提供了很多選項,如TIMESTAMP(如你所提到的),DATETIME,DATE,TIME,YEAR。你也可以使用本地MySQL時間函數。所以,沒有理由真正使用任何其他數據類型。

[編輯]

MYSQL documentation是關於它的數據類型相當明確:

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in ‘YYYY-MM-DD HH:MM:SS’ format. The supported range is ’1000-01-01 00:00:00′ to ’9999-12-31 23:59:59′. 

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of ’1970-01-01 00:00:01′ UTC to ’2038-01-19 03:14:07′ UTC. 
+0

就像我說的那樣,時間戳類型對我來說是新的。它與PHP工作得很好嗎?它只是將其視爲一個字符串,或者我可以使用date()函數來格式化它?這些如何處理2038上限呢? –

+0

安德魯,我已經編輯了你的問題的答案。 ;-) – medina

相關問題