Laravel迁移:即使指定,唯一密钥也太长

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


[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定的密钥太长;默认值为0。最大密钥长度为767字节(SQL:alter table users添加唯一的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(),这已经完成了。它仍然给出错误。这里发生了什么?


呼如林
浏览 783回答 3
3回答

茅侃侃

更新1从Laravel 5.4开始,不再需要这些更改。Laravel 5.4默认使用utf8mb4字符集,该字符集支持在数据库中存储“表情符号”。如果要从Laravel 5.3升级应用程序,则无需切换到此字符集。更新2当前默认情况下,当前生产的MariaDB版本不支持此设置。默认情况下,它在MariaDB 10.2.2+中实现。解并且,如果您有意要使用正确的Future-default(从Laravel 5.4开始)对的UTF8多字节utf8mb4支持,请开始修复?您的数据库配置。在Laravel中config/database.php定义:'charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','engine' => 'InnoDB ROW_FORMAT=DYNAMIC',DYNAMIC允许存储长键索引。服务器设置(默认情况下包含在MySQL 5.7.7 + / MariaDB 10.2.2+中):[mysqld]# default character set and collationcollation-server = utf8mb4_unicode_cicharacter-set-server = utf8mb4# utf8mb4 long key indexinnodb_large_prefix = 1innodb_file_format = barracudainnodb_file_format_max = barracudainnodb_file_per_table = 1对于客户:[mysql]default-character-set=utf8mb4然后停止您的MySQL / MariaDB服务器。在那之后开始。热重启可能不起作用。sudo systemctl stop mysqldsudo systemctl start mysqld现在,您有了具有UTF8支持的Laravel5.x。
打开App,查看更多内容
随时随地看视频慕课网APP