如何在数据库中最好地存储时间戳或日期?

时间:2012-03-21 07:55:52

标签: java sql database

当我需要存储时间/日期信息时,如何将其存储在数据库中最好? 如果我将它们存储为String表示,例如获取当前时间戳(例如使用Date)并将String表示存储在数据库中这是一个好主意吗?
这是什么最好的做法?有什么缺点?

3 个答案:

答案 0 :(得分: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数据类型同义词。

答案 1 :(得分:1)

最好在MySQL和T-SQL中使用timestamp数据类型。

使用时间戳可以让你对数据进行更容易的查询,添加或减少天,月,年等任何你喜欢的内容。订购也更容易。

时间戳还包含时区部分,因此如果您需要将您的网站国际化,那将更容易。

大多数语言(如PHP)也具有以您选择的格式显示时间戳的功能,因此您可以将时间戳转换为更易读的格式。

最后,javascript / jquery插件通常需要完整的时间戳来执行jQuery timeago的日期和时间计算。

答案 2 :(得分:1)

最佳实践是使用数据库供应商提供的DATE / TIMESTAMP数据类型,具有基本数据类型的好处之一是“将来您可以查询日期时间特定条件”,例如将来您可能需要到

  1. 生成特定月份/年度的报告
  2. 在两个日期之间生成报告,即01/05/11至01/02/12等。
  3. 要显示日期明智的报告(即8月15日的总销售额,11),尽管这也可以使用String数据类型完成,但我认为日期比较比字符串表示(char或Varchar等)快得多。 4 .....
  4. 除上述条件外,还有更多使用日期更明智的案例? TimeStamp而不是String ....