2012-03-21 66 views
4

當我需要存儲時間/日期信息時,最好如何將其存儲在數據庫中?
如果我將它們存儲爲String表示,例如獲取當前時間戳(例如使用Date)並將String表示存儲在數據庫中是否是一個好主意?
這樣做的最佳做法是什麼?有什麼缺點?如何最好地在數據庫中存儲時間戳或日期?

回答

15

最佳做法是在數據庫中使用TIMESTAMPDATE類型。所有主要數據庫供應商都支持這些SQL標準數據類型

除了性能和存儲優化之外,您還可以獲得表現力,並且可以直接在數據庫中使用大量日期時間操作函數和操作,具體取決於您使用的數據庫。想想比較日期,加入日期,加入間隔時間(如明天是星期幾),等等

注意...

  • 如果你使用的是Oracle,提防DATE也包含時間信息
  • 如果您使用SQLite,請注意日期時間類型可能具有數字或文本關聯。即它們被存儲爲數字或文本。
  • 如果您使用的SQL Server中,Sybase(ASE和SQL Anywhere的),SQLite的,該TIMESTAMP數據類型的特定方言版本被稱爲DATETIME(SQL Server的TIMESTAMP實際上是一個VARBINARY(8)
  • 至少H2, HSQLDB,MySQL,Sybase SQL Anywhere支持TIMESTAMPDATETIME數據類型同義詞。
+0

我對使用一個'字符串'? – Jim 2012-03-21 07:59:44

+0

@Jim:我會在我更新的答案中回答這個問題 – 2012-03-21 08:11:06

1

最好在MySQL和T-SQL中使用timestamp數據類型。

使用時間戳可以讓您對數據執行更簡單的查詢,增加或減少日期,月份,年份。訂購更容易。

時間戳還包含一個時區部分,所以如果你需要國際化你的網站會更容易。

大多數語言(如PHP)還具有以您選擇的格式顯示時間戳的功能,因此您可以將時間戳轉換爲更易讀的格式。

最後,javascript/jquery插件通常需要完整的時間戳來執行日期和時間的計算,例如jQuery timeago。

+1

請注意,在(SQL Server的)T-SQL中,'timestamp'實際上是一個'varbinary(8)'... SQL時間戳數據類型被稱爲' datetime'在T-SQL中... – 2012-03-21 08:09:04

1

最佳做法是使用數據庫供應商提供的DATE/TIMESTAMP數據類型,具有基本數據類型的好處之一是「將來可以查詢日期時間特定條件」,例如,將來您可能會需要對

  1. 生成特定月份的報告/年
  2. 生成兩個日期之間的報告,11年1月5日和12年1月2日等
  3. 之間即顯示日期明智的報告(即總銷量在8月15日11),儘管這也可以使用字符串數據類型完成,但我認爲日期比較是比字符串表示(char或Varchar等)快得多。 4 .....

除了上述條件,他們更多的情況下使用Date更明智嗎?時間戳,而不是字符串....

相關問題