我正在尝试在 Laravel 中迁移用户表。当我运行迁移时,出现此错误:
[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节(SQL:alter table usersadd unique users_email_uniq( email))
users
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(),我已经这样做了。它仍然给出错误。这里发生了什么?
unique()
为您的电子邮件指定较小的长度:
$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); }