SQL Server中datetime和timestamp之间的区别是什么?

139

TimestampDatetime在SQL Server中有什么区别?

我认为这两种格式都能够存储日期+时间。那么,它们之间的区别在哪里呢?

但是Timestamp不能存储日期、时间信息。

那么还有什么区别呢?


19
两种格式都不能存储日期和时间。TIMESTAMP的命名会让人们认为它能够存储,但实际上这只是微软的某位人员非常糟糕的命名决定(直到为时已晚,没有人去检查SQL标准)。 - Aaron Bertrand
1
@AaronBertrand,SQL Server中的datetime列值存储类似于2016-06-05 04:38:56.157的值。这不是日期和时间值吗?我同意时间戳显示十六进制值,例如0x00000000000007D9,每当我更新行时它就会简单地递增1。那么为什么您说这两种格式都不能存储日期和时间呢? - RBT
4
好的。我发表的评论(5年前!)并不意味着二进制值不能存储日期/时间信息,而是TIMESTAMP/ROWVERSION列具体使用了二进制格式,但它们并没有在那里存储任何日期或时间信息。好吧,我们别纠结这个问题了,可以吗? - Aaron Bertrand
3
哦,好的。我有印象你是在对两种数据类型都做了一个概括性的陈述。@aaronBertrand 我唯一关心的是可以实际存储日期和时间的datetime数据类型。我今天在搜索timeStamp数据类型时才看到你的评论。干杯,伙计! - RBT
2个回答

145
根据文档timestamprowversion的同义词 - 它是自动生成的并且保证是唯一的。datetime不是 - 它只是处理日期和时间的数据类型,并且可以在插入等操作时由客户端指定。
1 当然,假设您正确使用了它。请参见评论。

9
有趣的是,MSDN指出,通过使用SELECT INTO可以欺骗rowversion变成非唯一的 - 尽管他们指出这是一个不好的做法。如果正确使用它(即让数据库管理rowversion值),则它将始终是唯一且单调递增的 - 这可能非常方便。 - Joel Brown
1
@HogRider:timestamp 是在哪个数据库系统上?根据这个答案,它只是 SQL Server 上的一行版本,实际上与时间无关。但在基于时间的系统上,它将基于数据库服务器的时钟。 - Jon Skeet
1
@HogRider:数据库服务器是托管数据库的计算机 - 通常其他计算机(客户端)与数据库服务器交流。在着迷于时间戳等具体细节之前,您应该了解更多有关数据库基础知识。 - Jon Skeet
2
@MitchWheat 说实话,这个问题更加明确,标签更好,并且有比你回答的那个问题多10倍的浏览量。Jon Skeet在11分钟内回答了它,很可能是在它被标记为重复之前,但我不确定因为我在2011年没有上SO。 编辑:两年后才被标记为重复。 :| - dckuehn
@MitchWheat 我觉得Jon有一个粉丝俱乐部。 - Ama
显示剩余8条评论

30

Datetime是一种数据类型。

Timestamp是一种用于行版本控制的方法。事实上,在SQL Server 2008中,这个列类型被重命名为rowversion(即已弃用timestamp)。它基本上意味着每次更改一行时,此值都会增加。这是通过一个数据库计数器完成的,该计数器会自动增加每个插入或更新的行。

了解更多信息:

http://www.sqlteam.com/article/timestamps-vs-datetime-data-types

http://msdn.microsoft.com/en-us/library/ms182776.aspx


1
在同一事务中更新的两个不同行具有相同的行版本。同一行被更新了两次,所以计数器应该被改变两次,对吧? - Royi Namir
@andreas 在你更正错误的陈述之后,我会给你点赞。该陈述声称两行可以拥有相同的行版本,这是不正确的。 - dejjub-AIS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接