📅  最后修改于: 2023-12-03 14:56:39.842000             🧑  作者: Mango
在 Laravel 中,当使用 MySQL 数据库时,有时候会出现 ERROR 1071 (42000) 的报错提示,报错原因为指定的密钥长度超过了 MySQL 数据库所支持的最大长度(767 字节),导致创建表失败。
以下是报错信息的示例:
[Illuminate\Database\QueryException]
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`))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
在 MySQL 数据库中,字符集是使用一组规则来存储和比较字符的方式,因此修改数据库的字符集是解决此问题的首选方法。
在 Laravel 中,可以通过修改 config/database.php
文件中的 charset
和 collation
配置项来设置 MySQL 数据库的字符集:
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
注意:utf8mb4
是支持包含 Emoji 表情的字符集,比 utf8
更为常用。
当修改数据库字符集无效时,可以将对应字段的长度限制缩小到 MySQL 数据库所支持的长度以内。
在 Laravel 中,可以使用 string
类型创建指定长度的字符串字段:
Schema::create('users', function (Blueprint $table) {
$table->string('email', 191)->unique();
});
其中的 191
是目前被认为是最大安全长度,因此可被用于索引的最大长度就限制在了 767bytes 以内。
以上就是解决 Laravel 中 ERROR 1071 (42000) 的报错提示的两种方法,分别是修改数据库字符集和指定字段长度,选择一个适合你的场景即可。