在Ruby on Rails中,DateTime、Timestamp、Time和Date有什么区别?
在Ruby on Rails中,DateTime、Timestamp、Time和Date有什么区别?
在我个人的经验中,编写程序时确保时间/日期正确是一项充满危险和难度的任务。
对于 Ruby 和 Rails,我一直感到困惑,因为它们提供了数量庞大的选项;我从来不知道应该选择哪一个。
当我在使用 Rails 并查看 ActiveRecord 数据类型时,我能发现以下内容:
- :datetime
- :timestamp
- :time
- :date
但我不知道它们之间的区别或者要注意哪些地方。
它们之间有什么区别?你用它们来干什么?
(附注:我正在使用 Rails3)
ActiveRecord中不同日期/时间格式之间的差异与Rails基本无关,而与您使用的数据库有关。
以MySQL为例(除了它最受欢迎外),您有DATE
,DATETIME
,TIME
和TIMESTAMP
列数据类型;就像您有CHAR
,VARCHAR
,FLOAT
和INTEGER
。
那么,您问,有什么区别?嗯,其中一些很容易理解。 DATE
只存储日期,TIME
只存储一天中的时间,而DATETIME
同时存储两者。
DATETIME
和TIMESTAMP
之间的区别有点微妙:DATETIME
格式为YYYY-MM-DD HH:MM:SS
。有效范围从年1000到年9999(以及其中的所有内容)。而当您从数据库中获取TIMESTAMP
时,它看起来类似,实际上只是Unix时间戳的前端。其有效范围从1970年到2038年。这里的区别,除了数据库引擎中的各种内置函数之外,是存储空间。因为DATETIME
存储年,月,日,小时,分钟和秒中的每个数字,所以它总共使用8个字节。由于TIMESTAMP
仅存储自1970-01-01以来的秒数,因此它使用4个字节。
您可以在此阅读有关MySQL时间格式之间的差异的更多内容。
最终,这取决于您需要时间/日期列执行的操作:
- 您是否需要在1970年之前或2038年之后存储日期和时间?=> 使用
DATETIME
。 - 您是否需要考虑数据库大小,而且您在该时间范围内?=> 使用
TIMESTAMP
。 - 您只需要存储日期吗?=> 使用
DATE
。 - 您只需要存储时间吗?=> 使用
TIME
。
说了这么多,Rails实际上为您做出了一些决定。 :时间戳
和 :日期时间
默认为 DATETIME
,而 :日期
和 :时间
分别对应于 DATE
和 TIME
。
这意味着在Rails中,您只需要决定是否需要存储日期、时间或两者都需要。