1. ホーム
  2. php

[解決済み] Laravelマイグレーション:ユニークキーが指定されても長すぎる

2022-04-17 23:31:19

質問

Laravelでusersテーブルをマイグレートしようとしています。マイグレーションを実行すると、このエラーが発生します。

[IlluminateDatabase QueryException] SQLSTATE[42000]: 構文エラー またはアクセス違反があります。1071 指定されたキーが長すぎました。 は767バイト(SQL: alter table users を追加し、一意の ユーザ名_メールアドレス_uniq( email ))

私のマイグレーションは以下の通りです。

Schema::create('users', function(Blueprint $table)
{
    $table->increments('id');
    $table->string('name', 32);
    $table->string('username', 32);
    $table->string('email', 320);
    $table->string('password', 64);
    $table->string('role', 32);
    $table->string('confirmation_code');
    $table->boolean('confirmed')->default(true);
    $table->timestamps();

    $table->unique('email', 'users_email_uniq');
});

ググってみたら このバグレポート の2番目のパラメータとしてインデックスキーを指定することができるとTaylorは言っています。 unique() 私はそれを実行しました。それでもエラーになります。どうなっているのでしょうか?

解決方法は?

メールの長さを小さく指定してください。

$table->string('email', 250);

実は、これがデフォルトなんです。

$table->string('email');

そして、あなたは良いはずです。

Laravel 5.4では、次のような解決策が見つかります。 Laravel 5.4:指定されたキーが長すぎるエラー、Laravelニュース の投稿をご覧ください。

この問題を解決するには、Migrations guideにあるように、AppServiceProvider.phpファイルを編集し、bootメソッド内でデフォルトの文字列長を設定するだけでよいのです。

use Illuminate\Database\Schema\Builder;


public function boot()
{
    Builder::defaultStringLength(191);
}