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

MySQL 8.0字符编码异常求助:导入数据后é显示为Ú的原因排查

问题分析与解决

核心原因

你的test.sql文件采用latin1编码(其中字符é对应的字节是0xE9),但当前MySQL客户端的连接编码(character_set_client、character_set_connection)是cp850,导致编码解析错位:

  1. 执行source时,MySQL按cp850编码读取SQL文件,把0xE9解析为cp850字符集中的Ú;
  2. 随后将Ú转换为latin1编码的0xDA存储到表中;
  3. 查询时,MySQL把0xDA转回cp850编码的0xE9,最终客户端显示Ú。

解决方法

方法1:临时修改会话编码后导入

在执行source命令前,先将客户端连接编码改为与SQL文件一致的latin1:

SET NAMES latin1;

这条命令会同时修改character_set_client、character_set_connection、character_set_results为latin1,确保MySQL正确解析SQL文件中的é,存储和查询时编码匹配。

执行完后再导入文件:

source test.sql;

方法2:转换SQL文件编码为cp850

将test.sql文件的编码转换为cp850(可通过文本编辑器如Notepad++的「编码」菜单完成),此时文件中é对应的字节会变为0x82(cp850中é的编码)。导入时MySQL按cp850解析,能正确转换为latin1的0xE9存储,查询时返回cp850编码的0x82,客户端显示é。

方法3:长期修改客户端默认编码

如果经常处理latin1编码的文件,可修改MySQL客户端配置文件(Windows下为my.ini,位于wamp64/bin/mysql/mysql8.0.31/目录),添加以下配置:

[client]
default-character-set=latin1

重启MySQL服务后,客户端连接默认使用latin1编码,无需每次手动修改。

验证方法

导入完成后,可通过以下SQL验证存储的字符是否正确:

SELECT HEX(titre) FROM chapitres;

若结果为E9,说明存储的是latin1编码的é,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:17:27