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

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

t.timestamps 

正如我所料,创建了两列:“updated_at”和“created_at”。 但是,它们的类型是“datetime”而不是“timestamp”。

我正在使用MySQL和“timestamp”类型,据我所知,它是专门为这种情况设计的 ,因为它占用的空间更少,并且与时区无关。

那么,有什么理由,为什么Rails 3使用“datetime”而不是“timestamp”? 我应该尝试解决这个问题吗? 如果是,除了不使用“t.timestamps”并且每次为每个新表分别定义“updated_at”和“created_at”列时,有没有办法做到这一点?

从内存中,mysql timestamp列类型的行为类似于updated_at ,因为每当更新记录时,它都会使用当前时间进行更新。

虽然这对updated_at列很有用,但这不是created_at所需的行为。

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

timestamp列具有有限的范围,从1970年开始到2038年结束。您可以谷歌“Unix Millennium Bug”获取更多信息,但这主要是因为unix时间戳存储为32位有符号整数。 时间戳以1970年1月1日以秒为单位表示,并且该数字在2038年自行包装。因此,即使timestamp看起来更简单,我通常也会使用datetime timestamp ,尤其是将历史数据或预测数据进一步表示为过去或将来。