Laravel – timestampsの2038年問題

マイグレーションファイルでのtimestamp

Laravelでマイグレーションファイルを生成させると、timestampが自動的に設定されている。たとえばusersテーブルを生成するマイグレーションファイルは以下のとおり。

生成されるテーブルの構造は以下のとおりで、引数を与えないtimestamps()メソッドはcreated_atupdated_atの2つのカラムを生成する。

ところがMySQLのtimestampは2038年問題を回避できないので、安易にこのまま使うののではなく、これらをdatetime型に変更しておいた方が安全。

timestamp datetime
UTC内部表現で保持 タイムゾーン文字列で保持
1970-01-01 00:00:01UTC~2038-01-19 03:14:07UTC 1000-01-01 00:00:00~9999-12-31 23:59:59

マイグレーションファイルの修正

timestamps()を削除して、必要なら以下の2行に入れ替えるのが一方法。

このように設定すると、Laravelの方で作成日時と更新日時を自動的に更新してくれる(tinkerでのモデル操作を参照)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です