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とかの時に同じ問題が起きるなら、第二引数に名前をつけたげればいいだけ。
以上。