First ;根据this

我编辑: app\Providers\AppServiceProvider.php

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

Second ;我发了 php artisan make:migration create_users

Third ;我实现了生成的类:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
           Schema::create('users2',function($users){
           $users->increments('id');
           $users->string('email',320)->unique(); // this causes errors
           $users->string('username',100)->unique();
           $users->string('password',50);
           $users->rememberToken();
           $users->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users2');
    }
}

Fourth ;发出后 php artisan migrate

我得到这个结果:

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长;最大密钥长度为767字节(SQL:alter table users2 add unique users2_email_unique(email))[PDOException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长;最大密钥长度为767字节

问题出在这一行: $users->string('email',320)->unique();

当我检查数据库时;我发现 email 列使用指定的长度320创建但不唯一 UNI

如果length设置为191或更小,则使用指定的长度和唯一性正确创建 email 列 .

那么如何允许创建既独特又不限于191天花板的列?!