【发布时间】:2013-06-06 10:56:09
【问题描述】:
我在浏览 msdn 关于 T-SQL 中的数据类型大小时发现了一些我有点困惑的东西。
根据http://msdn.microsoft.com/en-us/library/ms186724.aspx,datetime 使用 8 个字节并存储 1753-9999 年的日期,时间精度为 hh:mm:ss[.nnn]。现在,如果您分别查看日期和时间,时间使用 3-5 个字节存储 hh:mm:ss[.nnnnnnn],日期使用 3 个字节存储从 0 到 9999 年。
让我感到困惑的是,分别使用日期和时间为您提供了比日期时间多四位精度的更广泛的年份和时间,但它们都使用 8 个字节?为什么 datetime 的范围更小,精度更低,却使用相同的大小来存储自己?
【问题讨论】:
-
DATETIME早在很久以前就已经存在了 - 它可能不如新的DATE和TIME(和DATETIME2)数据类型优化。 -
同意 marc_s - 如果您想要(更)高效,请使用
datetime2。datetime已经存在了几十年,不一定是最好的选择。 -
即使将 DATE 年 0-9,999 存储为 3 个字节似乎完全是任意的。 3 个字节可以包含 2^24 个值(将近 1700 万个)。但一万年只包含 360 万个不同的日期。因此,他们实际上可以存储从 -20,000(公元前 20,000 年)到 20,000 年的年份。任何人都知道为什么他们不会尝试使用全套可用值?我认为内部存储结构的某些内容可以提高(处理方面)存储更少值的效率。
标签: sql-server tsql date datetime time