コンテンツにスキップ

Top

Laravel で MySQL でテーブルを作ろうとしたら、ユニークキーの名前が長いとエラーになった

Laravel で テーブルを作る場合、

php artisan make:migration create_hoge_tbl

みたいな感じでコマンドをたたくと、

./database/migrations/2023_01_11_154137_create_hoge_tbl.php が自動で作られる。

ここにいろいろカラムとか書いて、

php artisan migrate

するとテーブルができる(すでにある場合はエラーになるので大体いつも php artisan migrate:fresh してるが)

が、今やってみたら、

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'hoge_tbl_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_id_unique' is too long (SQL: alter table `hoge_tbl` add unique `hoge_tbl_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_id_unique`(`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_id_unique`))

まぁuniqueキーの名前をいやがらせみたいに長くしたせいなんだけど、LaravelというかMySQLは内部でテーブル名 + カラム名 + unique という名前でIDを作るみたいで、その長さの上限に達するとエラーになる。

対策としては、

$table->string('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_id', 32)->unique('hoge_tbl_id_unique')->nullable(false);

みたいな感じで、uniqueの中に名前(自分でほかのと被らないように一意にしないといけないけど)をつけてあげればいい。

ほかにも、table->uniqueとかの時に同じ問題が起きるなら、第二引数に名前をつけたげればいいだけ。

以上。