【发布时间】:2017-12-12 14:09:56
【问题描述】:
我有以下错误。有人知道为什么吗?
php 工匠迁移
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key
was too long; max key length is 767 bytes (SQL: alter table `users`
add unique `users_email_unique`(`email`))
create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name',255);
$table->string('email',255)->unique();
$table->string('password',255);
$table->rememberToken();
$table->timestamps();
});
【问题讨论】:
-
这是因为
email字段使用的字符集。 1 个字符不会是 1 个字节,而是 可能 4 个字节。当您尝试使该字段唯一时,它会失败,因为该列对于索引来说太长了。解决此问题的方法是创建另一个包含email的散列 的列。您可以将该列设为email_hash binary(20),然后在其中保存电子邮件的原始sha1哈希并使其唯一。这使您的索引的长度始终为 20 字节,并且适用于您的用例。