这更像是一个思考问题。我一直在围绕不同的时间/日期格式工作,我注意到似乎更倾向于将日期/时间对象存储为数据库(如Mongo, MySQL, postegen)中具有唯一类(如ISOdate或POSIXct)的变量。
我明白为什么在分析数据时要转换为这种格式,但是我想知道当我以这种格式存储在数据库中时有什么优势?
这些格式是否比传统数字占用更少的空间?我好像在网上找不到答案。
为了方便讨论,我们只讨论一个简单的date
类型(只有日期,没有时间或时区)-例如MySQL中的DATE
类型。
假设我们存储了一个2014-12-31
字符串。一天之后呢?作为一个人,很容易想出答案2015-01-01
,但计算机需要将这些算法编程进去。
虽然这些类型可能会公开具有处理日历数学算法的api,但在底层,它们最有可能将信息存储为从某个开始日期(称为"epoch")开始的天数。所以2014-12-31
实际上被存储为类似16701
的东西。计算机可以非常有效地加1得到第二天的16702
。
这也使得排序更容易。当然,在YYYY-MM-DD
格式中,保留了字典排序顺序,但是对字符串排序仍然比对整数排序需要更多的处理能力。此外,当以字符串表示时,日期可能会针对其他区域性进行格式化,例如MM/DD/YYYY
或DD/MM/YYYY
格式,这些格式不能按字典顺序排序。如果您将数千个日期放入表中,然后使用WHERE
或ORDER BY
子句进行查询,则数据库需要能够有效地对值进行排序,而整数排序比分析字符串要快得多。
是的,它们往往占用更少的物理存储空间。
同样的原则也适用于同时显示日期和时间的情况,您还必须考虑时间值的精度(秒、毫秒、纳秒等)