【发布时间】:2014-07-10 06:47:19
【问题描述】:
我正在尝试在 Laravel 中迁移用户表。当我运行迁移时,出现此错误:
[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误 或访问冲突:1071 指定的密钥太长;最大密钥长度 为 767 字节(SQL:alter table
usersadd unique users_email_uniq(
我的迁移如下:
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');
});
经过一番谷歌搜索后,我遇到了this bug report,Taylor 说您可以将索引键指定为unique() 的第二个参数,我已经这样做了。它仍然给出错误。这是怎么回事?
【问题讨论】:
-
您为什么使用 320 个字符的电子邮件?这可能是你的问题。
-
确实是这个问题,不知道为什么。但是,是的,你是对的,我不知道为什么我为每个字段指定了字符长度。已取消这些限制
-
有趣的是,没有人建议使用包含电子邮件哈希的固定长度字段,瞧——对于任何框架和任何关系数据库,问题都永远解决了。因为这就是我们保证唯一性的方式——使用可变长度输入的固定数字表示,因为数字范围足够大(对于 sha1 / sha256 也是如此)。
标签: php mysql laravel migration unique-key