小编典典

Laravel迁移:唯一键太长,即使指定

all

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

[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误或访问冲突:1071
指定的键太长;最大密钥长度为 767 字节(SQL:alter table usersadd unique 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(),我已经这样做了。它仍然给出错误。这里发生了什么?


阅读 117

收藏
2022-07-31

共1个答案

小编典典

为您的电子邮件指定较小的长度:

$table->string('email', 250);

这是默认值,实际上:

$table->string('email');

你应该很好。

对于 Laravel 5.4,您可以在Laravel 5.4: Specified key was too long 错误中找到解决方案,Laravel
新闻
帖子:

如迁移指南中所述,要解决此问题,您只需编辑 AppServiceProvider.php 文件并在引导方法中设置默认字符串长度:

use Illuminate\Database\Schema\Builder;


public function boot()
{
    Builder::defaultStringLength(191);
}
2022-07-31