當我需要存儲時間/日期信息時,最好如何將其存儲在數據庫中?
如果我將它們存儲爲String
表示,例如獲取當前時間戳(例如使用Date
)並將String
表示存儲在數據庫中是否是一個好主意?
這樣做的最佳做法是什麼?有什麼缺點?如何最好地在數據庫中存儲時間戳或日期?
回答
最佳做法是在數據庫中使用TIMESTAMP
或DATE
類型。所有主要數據庫供應商都支持這些SQL標準數據類型
除了性能和存儲優化之外,您還可以獲得表現力,並且可以直接在數據庫中使用大量日期時間操作函數和操作,具體取決於您使用的數據庫。想想比較日期,加入日期,加入間隔時間(如明天是星期幾),等等
注意...
- 如果你使用的是Oracle,提防
DATE
也包含時間信息 - 如果您使用SQLite,請注意日期時間類型可能具有數字或文本關聯。即它們被存儲爲數字或文本。
- 如果您使用的SQL Server中,Sybase(ASE和SQL Anywhere的),SQLite的,該
TIMESTAMP
數據類型的特定方言版本被稱爲DATETIME
(SQL Server的TIMESTAMP
實際上是一個VARBINARY(8)
) - 至少H2, HSQLDB,MySQL,Sybase SQL Anywhere支持
TIMESTAMP
和DATETIME
數據類型同義詞。
最好在MySQL和T-SQL中使用timestamp數據類型。
使用時間戳可以讓您對數據執行更簡單的查詢,增加或減少日期,月份,年份。訂購更容易。
時間戳還包含一個時區部分,所以如果你需要國際化你的網站會更容易。
大多數語言(如PHP)還具有以您選擇的格式顯示時間戳的功能,因此您可以將時間戳轉換爲更易讀的格式。
最後,javascript/jquery插件通常需要完整的時間戳來執行日期和時間的計算,例如jQuery timeago。
請注意,在(SQL Server的)T-SQL中,'timestamp'實際上是一個'varbinary(8)'... SQL時間戳數據類型被稱爲' datetime'在T-SQL中... – 2012-03-21 08:09:04
最佳做法是使用數據庫供應商提供的DATE/TIMESTAMP數據類型,具有基本數據類型的好處之一是「將來可以查詢日期時間特定條件」,例如,將來您可能會需要對
- 生成特定月份的報告/年
- 生成兩個日期之間的報告,11年1月5日和12年1月2日等
- 之間即顯示日期明智的報告(即總銷量在8月15日11),儘管這也可以使用字符串數據類型完成,但我認爲日期比較是比字符串表示(char或Varchar等)快得多。 4 .....
除了上述條件,他們更多的情況下使用Date更明智嗎?時間戳,而不是字符串....
- 1. 如何最好地在MySql中存儲日期/時間?
- 2. 如何在MySQL數據庫中最好地存儲年份,月份和日期?
- 3. 在數據庫中存儲joda時間日期時間
- 4. 好的數據庫設計 - 在哪裏存儲時間戳
- 5. 如何在數據庫中獲取和存儲時間戳
- 6. 如何在h2數據庫中存儲時間戳
- 7. 如何在數據庫中存儲日期和時間(在用戶執行操作時存儲日期)
- 8. 如何在日期查詢數據庫,但數據庫存儲日期爲日期+時間。
- 9. 在JSP當前時間戳日期日期從數據庫
- 10. 將日期存儲爲MySQL中的unix時間戳或TIMESTAMP數據類型?
- 11. 如何將日期/時間對象存儲到數據庫
- 12. 日期時間和時間戳在Mysql數據庫表
- 13. 在Android上的SQL數據庫中存儲日期和時間
- 14. 將日期時間存儲在數據庫中?
- 15. 在數據庫中只存儲日期(不含)時間
- 16. 在數據庫中存儲UTC日期時間
- 17. 如何在MySql時間戳中存儲java日曆時間?
- 18. 如何在SQL Server中存儲Oracle時間戳精度6日期時間
- 19. 在數據庫中保存時間戳
- 20. 在Oracle數據庫中存儲日期
- 21. 在數據庫中存儲日期
- 22. 在數據庫中存儲日期
- 23. 比較java中存儲在數據庫中的時間戳
- 24. 如何在EDB數據庫中保存日期時間
- 25. mysql時間戳或日期時間
- 26. 爲什麼Drupal CCK在數據庫中使用unix時間戳而不是本地mysql DATETIME存儲日期?
- 27. 如何通過時間戳最好地保存聊天信息?
- 28. 時間戳,日期,時間或日期時間是哪個?
- 29. 如何在Android的Sqlite數據庫中存儲和檢索日期和時間
- 30. 如何將日期時間值存儲在我的Magento數據庫中?
我對使用一個'字符串'? – Jim 2012-03-21 07:59:44
@Jim:我會在我更新的答案中回答這個問題 – 2012-03-21 08:11:06