我正在尝试在Laravel中迁移用户表。运行迁移时,出现以下错误:
[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定的密钥太长;默认值为0。最大密钥长度为767字节(SQL:alter table users添加唯一的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中找到一个解决方案:指定密钥太长错误,Laravel新闻发布:
如要解决此问题的《迁移指南》所述,您只需编辑AppServiceProvider.php文件,并在启动方法中设置默认字符串长度:
use Illuminate\Database\Schema\Builder; public function boot() { Builder::defaultStringLength(191); }