Laravel 移行: 指定されていても一意のキーが長すぎる 質問する

Laravel 移行: 指定されていても一意のキーが長すぎる 質問する

Laravel でユーザー テーブルを移行しようとしています。移行を実行すると、次のエラーが発生します。

[Illuminate\Database\QueryException] SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1071 指定されたキーが長すぎます。最大キー長は 767 バイトです (SQL: alter table usersadd unique users_email_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');
});

グーグルで調べたらこのバグレポートここで、Taylor は、インデックス キーを の 2 番目のパラメータとして指定できると言っていますunique()。私もそうしました。それでもエラーが発生します。一体何が起こっているのでしょうか?

ベストアンサー1

電子メールの長さを短く指定します:

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

実際のところ、これがデフォルトです:

$table->string('email');

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

Laravel 5.4の場合、ここに解決策がありますLaravel 5.4: 指定されたキーが長すぎるというエラー、Laravel ニュース役職:

移行ガイドに概説されているように、これを修正するには、AppServiceProvider.php ファイルを編集し、ブート メソッド内でデフォルトの文字列の長さを設定するだけです。

use Illuminate\Database\Schema\Builder;


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

おすすめ記事