質問: 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` を利用するのでしょうか?
回答: railsの仕様については分からないので申し訳ありませんが、私個人としてはMySQLで日時を記録するためにはdatetime型が適しているのではないかと考えます。 MySQLのDATETIME型とTIMESTAMP型の違いを検証してみた - Qiita 理由は、この記事にもある通り、timestamp型ではいわゆる2038年問題を潜在的に含んでしまうからです。 今後のバージョンアップで対応される可能性はありますが、システムに組み込もうとした場合、一定のリスクとも考えられるのではないでしょうか。