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天花板的列?!