2012-03-21 41 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更明智吗?时间戳,而不是字符串....

相关问题