当我需要存储时间/日期信息时,最好如何将其存储在数据库中?
如果我将它们存储为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