第一;根据{{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_unique
([PDOException] SQLSTATE [42000]:语法错误或访问冲突: 1071指定密钥太长;最大密钥长度为767字节
问题出在这一行:
$users->string('email',320)->unique();
当我检查数据库时;我发现email
列使用指定的长度320创建,但不是唯一的UNI
如果length设置为191或更小,则email
列会以指定的长度和唯一性正确创建。
那么如何允许创建既独特又不限于191天花板的列?!