You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel迁移服务器报错:Server sent charset unknown to the client

解决 "Server sent charset unknown to the client" 错误

我之前迁移Laravel应用到新服务器时也碰到过完全一样的问题——明明数据库和应用配置都设了utf8和utf8_general_ci,但还是报这个字符集错误。下面是几个我试过的有效解决方案,你可以逐一排查:

1. 检查MySQL服务器的全局字符集配置

数据库层面的字符集设置可能被MySQL服务器的全局配置覆盖了。你需要登录新服务器的MySQL,执行以下命令查看全局字符集:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

如果看到character_set_server或collation_server不是utf8/utf8_general_ci,需要修改MySQL的配置文件(Linux通常是/etc/my.cnf或/etc/mysql/my.cnf,Windows是my.ini),在[mysqld]段添加:

character-set-server=utf8
collation-server=utf8_general_ci

修改后一定要重启MySQL服务,再重新查看全局变量是否生效。

2. 在Laravel配置中添加连接初始化命令

有时候即使配置了charset和collation,数据库连接时的字符集协商还是会出问题。你可以在MySQL配置数组里添加options参数,强制设置连接字符集:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
    'options' => [
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    ],
],

添加后清空Laravel的配置缓存:

php artisan config:clear

3. 检查MySQL版本兼容性

如果新服务器的MySQL是8.0及以上版本,要注意MySQL 8.0对字符集的处理逻辑有细微变化——它默认的utf8实际是utf8mb3,部分旧驱动可能在协商字符集时出现不兼容。你可以尝试把配置里的charset改成utf8mb4,collation改成utf8mb4_general_ci,同时对应修改数据库的字符集(如果数据兼容的话),这也是现在更推荐的字符集设置方案。

4. 验证客户端连接字符集

你可以直接用MySQL客户端连接服务器,执行:

SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_connection';

看这两个值是不是utf8。如果不是,说明客户端连接时没有正确设置字符集,这时候上面的初始化命令就能起到强制修正的作用。

按照上面的步骤排查,应该能解决这个问题。

内容的提问来源于stack exchange,提问作者user3242861

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:58:18