2010-06-01 195 views
17

可能重複:
datetime vs timestamp?Unix時間戳VS日期時間

我有一個MySQL表,其中有一列add_date。它跟蹤記錄添加到數據庫的日期/時間。 1小時前,3個月前,1年前等

  • 允許用戶搜索插入任何一天的記錄:當在格式中加入記錄

    1. 顯示:基於該表

      查詢/月/年。因此,用戶可能被允許選擇僅查看2009年插入的記錄。

    這將是在這種情況下更好 - UNIX時間戳或日期時間?

    現在我正在使用這兩種方法,但由於表格隨着時間的推移會有數百萬條記錄,因此這兩列可能會影響數據庫的大小。

    Unix時間戳似乎是在PHP轉換更好地2 hours前格式,也實在是時區獨立。但日期時間具有更好的可讀性,並且查詢特定的日期/時間/年似乎更容易。

    您的建議?

  • 回答

    14

    當你有選擇時,我會說爲mySQL日期去。

    • 你不會有跨度使用MySQL的日期函數(BETWEEN(), DATE_ADD等)

    • 日期相關的查詢會快很多采取的date range issue小號

    • 您可以輕鬆地查詢時間照顧特別是當你有數百萬條記錄時,因爲你不必使用FROM_UNIXTIME(),這在大型查詢中可能很貴

    • 這是chi ld的作用是在必要時將DATE字段轉換爲UNIX時間戳。

    +2

    這個。只要使用UNIX_TIMESTAMP(your_column),如果你想在PHP端使用時間戳。 但在數據庫中,使用本機日期類型來存儲日期。此外,數據庫中的數據可能被其他可能偏好SQL日期格式的應用程序使用,而不是時間戳。 – Arkh 2010-06-01 09:39:30

    +0

    關於時區,將日期轉換爲unix時間戳會有什麼問題嗎? – Yeti 2010-06-01 09:39:59

    +1

    @Lost_in_code實際上是個好問題。涉及多種因素,mySQL服務器的時區設置以及PHP默認使用的系統時區設置。通常,mySQL DATETIME字段是時區不敏感的。只要您在那裏存儲UTC日期,您應該可以輕鬆地將它們轉換爲時間戳,但是如果mySQL和/或PHP的時區與UTC不同,請小心。相關:http://stackoverflow.com/questions/18449/dealing-with-php-server-and-mysql-server-in-different-time-zones – 2010-06-01 11:08:20

    4

    我會去的MySQL格式,只是因爲MySQL有很多日期時間功能,使用時間戳會花費你另一次轉換。

    但由於該表將擁有數百萬條記錄 隨着時間的推移,兼具 列可能會影響 數據庫的大小。

    哦,我的。
    你真的關心4個額外的兆字節空間嗎?

    +0

    我真的不知道需要多少空間(我是大型數據庫的新手)。如果你說這只是幾個MB,那麼我不會看到兩者都有問題。 – Yeti 2010-06-01 09:29:09

    +0

    如果你不知道數字,你不應該提及它。程序員不應該猜測。這是天氣預報員的工作。 http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html會告訴你,日期時間需要8個字節和int時間戳 - 4.所以,4 * 1000000 =小於4Mb – 2010-06-01 09:32:58

    +1

    你'你可能也想在這兩個字段上使用索引。這不是太昂貴的空間,但如果你使用多個字段索引,它可能會影響你的表現。 – Kaivosukeltaja 2010-06-01 09:33:12

    3

    您可以通過使用Unix時間戳和MySQL from_unixtime()功能在需要將結果轉換爲datetime格式獲得兩全其美。

    +1

    您還可以通過使用datetime並在必要時使用日期函數轉換爲unix時間戳來獲得兩全其美的效果。考慮到使用日期時間數據類型使得許多查詢更容易,我會說最好這樣做。 – 2010-06-01 09:50:57

    +0

    El Yobo說什麼。潛在的性能損失是什麼讓我害怕大表中的'from_unixtime()'(儘管沒有任何基準測試)。 – 2010-06-01 09:53:38

    +0

    當然,from_unixtime()不應該用於預期會導致大量數據,只有那些返回要顯示的結果集的數據。此外,使用unix_timestamp('2010-06-01 13:00'),仍然可以使用日期時間類型使查詢更具可讀性。每次查詢只進行一次轉換,因此不會出現性能損失。 – Kaivosukeltaja 2010-06-01 09:59:18