🕐
Laravel + MySQL timestamp型の2038年問題対策
はじめに
Laravel + MySQLでのtimestamp型の2038年問題対策についてまとめました。
2038年問題とは
MySQLでの問題点
TIMESTAMP型は、1970-01-01 00:00:01
UTC から 2038-01-19 03:14:07
UTC の範囲であることが書かれています。
データベースでの対策方法
MySQLのDATETIME型を使用する
DATETIME型は、9999-12-31 23:59:59
が最大値なので
こちらを利用することで対策が可能です。
PostgreSQLを使用する
PostgreSQL 8.4以降では、TIMESTAMP型は8バイトになっており
2038年問題は解決済みです。
Laravelマイグレーションでの対策方法
timestamp型をdatetime型に変更します。
deleted_at、created_at、updated_at をdatetime型にする
Laravel10以前
古いバージョンのLaravelでは、専用のメソッドは使用せず、datetimeメソッドを使って追加します。
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->datetime('deleted_at')->nullable();
$table->datetime('created_at')->nullable();
$table->datetime('updated_at')->nullable();
});
}
\Illuminate\Database\Schema\Blueprint 参考
Laravel10〜
Blueprintの新メソッド「softDeletesDatetime
」、「datetimes
」を使って追加します。
public function up(): void
{
Schema::create('contents', function (Blueprint $table) {
$table->id();
$table->softDeletesDatetime();
$table->datetimes();
});
}
\Illuminate\Database\Schema\Blueprint コミット
2023/8現在では、ドキュメントの方には、まだ記載がないようです。
関連書籍
Discussion