一尘不染

Laravel迁移:即使指定,唯一密钥也太长

mysql

我正在尝试在Laravel中迁移用户表。运行迁移时,出现以下错误:

[Illuminate \ Database \ QueryException] SQLSTATE
[42000]:语法错误或访问冲突:1071指定的密钥太长;默认值为0。最大密钥长度为767字节(SQL:alter table
users添加唯一的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');
});

经过一番谷歌搜索后,我发现了这个错误报告,泰勒说您可以将索引键指定为的第二个参数unique(),这已经完成了。它仍然给出错误。这里发生了什么?


阅读 276

收藏
2020-05-17

共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);
}
2020-05-17