Ruby on Rails:为什么ActiveRecord在时间戳字段中使用“datetime”类型而不是“timestamp”类型?

7

在我的数据库迁移文件中,我插入了以下行:

t.timestamps

我预期会创建两列:"updated_at"和"created_at"。但是它们的类型是"datetime"而不是"timestamp",我正在使用MySQL和"timestamp"类型。根据我的理解,"timestamp"类型正是为这种情况设计的,因为它占用更少的空间并且与时区无关。
所以,Rails 3为什么使用"datetime"而不是"timestamp"呢?我应该尝试修复吗?如果是,是否有其他方法来做到这一点,而不是每次为每个新表单独定义"updated_at"和"created_at"列,而不使用"t.timestamps"?
2个回答

5

从记忆中看,mysql的timestamp列类型与updated_at类似,每当记录更新时,它会被更新为当前时间。

虽然这对于updated_at列很有用,但对于created_at来说,这不是期望的行为。

此外,Rails根据应用程序设置处理时区(通常应设置为UTC),因此使用mysql的时间可能与其他日期时间记录不一致。


-1

timestamp列有一个有限的范围,从1970年开始,到2038年结束。您可以通过谷歌搜索“Unix千年虫”获取更多信息,但基本上是因为Unix时间戳存储为32位有符号整数。时间戳表示自1970年1月1日以来的秒数,并且该数字在2038年时会重新开始。因此,即使timestamp似乎是更简单的解决方案,尤其是用于表示更远的历史或预测数据,我通常使用datetime


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