为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2019-11-05 15:11:57
我正在尝试在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(),这已经完成了。它仍然给出错误。这里发生了什么?
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

更新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 collation

collation-server = utf8mb4_unicode_ci

character-set-server = utf8mb4


# utf8mb4 long key index

innodb_large_prefix = 1

innodb_file_format = barracuda

innodb_file_format_max = barracuda

innodb_file_per_table = 1

对于客户:


[mysql]

default-character-set=utf8mb4

然后停止您的MySQL / MariaDB服务器。在那之后开始。热重启可能不起作用。


sudo systemctl stop mysqld

sudo systemctl start mysqld

现在,您有了具有UTF8支持的Laravel5.x。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 782 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信