

Rails の ActiveRecord では、 migration において `t.timestamps` で導入される `created_at` や
`updated_at` のカラムについて、少なくとも MySQL においては、 datetime 型を DB 上に作成します。

`datetime` 型は、いうなればその時刻をタイムゾーンなしで文字列で DB 上に保存しているのに近く、そのデータが動作していた AP(Rails)
サーバーがどのタイムゾーンで動いていたのかの情報がない限り、そのデータは正しく取扱えなくなってしまいます。

database に時刻を保存するのならば、なので、 `timestamp` 型を用いた方が良さそうな気がするのですが、 Rails
ではそのような設計にはなっていないです。

### 質問

  * なぜ、 rails では `created_at` や `updated_at` に `timestamp` ではなく `datetime` を利用するのでしょうか？


CC BY-SA 4.0
2018-12-02T07:24:08.470
50827
2019-05-28T04:55:05.310
2018-12-02T07:31:31.637
754
754
question
ruby-on-rails mysql rails-activerecord
どうして rails では timestamp ではなく datetime を created_at などに利用するのですか？


railsの仕様については分からないので申し訳ありませんが、私個人としてはMySQLで日時を記録するためにはdatetime型が適しているのではないかと考えます。

[MySQLのDATETIME型とTIMESTAMP型の違いを検証してみた -
Qiita](https://qiita.com/ykawakami/items/2449a24e3b82ff0cbab6)

理由は、この記事にもある通り、timestamp型ではいわゆる2038年問題を潜在的に含んでしまうからです。  
今後のバージョンアップで対応される可能性はありますが、システムに組み込もうとした場合、一定のリスクとも考えられるのではないでしょうか。


CC BY-SA 4.0
2019-05-28T03:51:43.517
55306
2019-05-28T04:55:05.310
2019-05-28T04:55:05.310
3060
34495
50827
answer