Ruby on Rails:为什么ActiveRecord对时间戳字段使用"datetime"类型而不是"timestamp"?

krn*_*krn 7 activerecord ruby-on-rails

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

t.timestamps
Run Code Online (Sandbox Code Playgroud)

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

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

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

Zub*_*bin 5

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

虽然这对updated_at列很有用,但这不是理想的行为created_at.

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