在Laravel数据库迁移命令中;无法创建一个BOTH唯一且大小超过191的列。怎么解决?

时间:2017-08-31 15:42:09

标签: php laravel artisan laravel-migrations

第一;根据{{​​3}}

我编辑过:app\Providers\AppServiceProvider.php

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

第二;我发布了php artisan make:migration create_users

第三;我实现了生成的类:

<?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');
    }
}

;发出php artisan migrate

我得到了这个结果:

  

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误   或访问冲突:1071指定密钥太长;最大密钥长度   是767字节(SQL:alter table users2添加唯一   users2_email_uniqueemail))

     

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:   1071指定密钥太长;最大密钥长度为767字节

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

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

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

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

0 个答案:

没有答案
相关问题