在Ruby on Rails中,DateTime, Timestamp, Time和Date之间的区别是什么?

根据我的经验,在编程时获得正确的日期/时间总是充满危险和困难。

在这一点上,Ruby和Rails总是让我避而远之,如果只是因为有太多的选择;我一直不知道该选哪个。

当我使用Rails并查看ActiveRecord数据类型时,我可以找到以下内容

:datetime、:timestamp、:time、:date

而且不知道有什么不同,也不知道陷阱在哪里。

有什么不同?你用它们做什么?

(附注:我使用Rails3)

138052 次浏览

ActiveRecord中不同日期/时间格式之间的差异与Rails关系不大,而与您使用的数据库有关。

以MySQL为例(如果没有其他原因,因为它是最流行的),你有DATEDATETIMETIMETIMESTAMP列数据类型;就像你有CHARVARCHARFLOATINTEGER

所以,你会问,有什么不同?有些是不言自明的。DATE只存储日期,TIME只存储一天中的时间,而DATETIME两者都存储。

DATETIMETIMESTAMP之间的区别有点微妙: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实际上为您做出了其中的一些决定:timestamp:datetime都将默认为DATETIME,而:date:time分别对应于DATETIME

这意味着在Rails中,您只需决定是否需要存储日期、时间或两者都存储。

  1. :datetime(8字节)

    • 存储日期和时间格式的YYYY-MM-DD HH:MM:SS
    • 对于birth_date这样的列很有用
    • 李< / ul > < / >
    • :时间戳(4字节)

      • 1970-01-01以来的存储秒数
      • 对于updated_at、created_at等列很有用
      • 李< / ul > < / >
      • :date(3字节)
        • 店日期
        • 李< / ul > < / >
        • :time(3字节)
          • 商店的时间
          • 李< / ul > < / >

下面是我找到的一个很棒的精确的解释。

TIMESTAMP用来跟踪记录的变化,每次更新 记录被更改。DATETIME用于存储特定的和静态的

.不受任何记录变化的影响

TIMESTAMP也受不同TIME ZONE相关设置的影响。 DATETIME是常量

TIMESTAMP内部转换当前时区为UTC存储, 并在检索期间将其转换回当前时区。

. DATETIME不能这样做

TIMESTAMP是4字节,DATETIME是8字节。

TIMESTAMP支持的范围:1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 ' UTC DATETIME支持的范围:' 1000-01-01 00:00:00 '到 “9999-12-31 23:59:59”< / p >

来源:https://www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/#:~:text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant

也……

table with different column "date"类型和相应的rails迁移类型,取决于数据库