Laravel 11执行php artisan migrate报错:未知排序规则utf8mb4_0900_ai_ci
解决Laravel 11迁移时「General error: 1273 Unknown collation: 'utf8mb4_0900_ai_ci'」错误
报错原因
utf8mb4_0900_ai_ci是MySQL 8.0及以上版本才支持的排序规则,你的MySQL版本低于8.0,而Laravel 11默认使用该规则,导致迁移时出现兼容性报错。
解决方案
方案一:升级MySQL版本
将MySQL升级到8.0及以上版本,直接匹配Laravel 11的默认配置要求。
方案二:修改Laravel数据库配置
调整数据库配置文件,使用低版本MySQL支持的排序规则:
- 打开项目根目录下的
config/database.php - 找到
mysql配置块中的collation字段,将utf8mb4_0900_ai_ci替换为utf8mb4_unicode_ci或utf8mb4_general_ci(这两个规则兼容MySQL 5.7及以下版本) - 确保
charset字段保持为utf8mb4
修改后的示例代码:
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', // 替换为兼容的排序规则 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
方案三:通过.env文件覆盖默认规则
- 在项目根目录的
.env文件中添加一行配置:DB_COLLATION=utf8mb4_unicode_ci - 打开
config/database.php,确保mysql配置块的collation字段读取环境变量:
'collation' => env('DB_COLLATION', 'utf8mb4_0900_ai_ci'),
这样.env中的配置会覆盖Laravel的默认排序规则。
执行完以上任意一种方案后,重新运行php artisan migrate即可完成迁移。
内容的提问来源于stack exchange,提问作者Davidos
相关产品推荐
相关产品推荐

