答案:MySQL命令行乱码本质是character_set_client与character_set_results未和终端编码对齐,需通过SHOW VARIABLES检查并用SET NAMES临时统一,再配~/.my.cnf的[client]和[mysql]段及终端UTF-8编码实现永久解决。

MySQL命令行客户端显示乱码,本质是character_set_client和character_set_results没跟终端编码对齐——不是改服务器,而是让连接层“说同一种话”。
检查当前连接的字符集变量
连上 MySQL 后立刻执行:SHOW VARIABLES LIKE 'character_set%';
重点关注这三项:
-
character_set_client:你输入的 SQL 语句用什么编码发给服务端 -
character_set_connection:服务端内部转换用的中间编码(通常应与 client 一致) -
character_set_results:查询结果返回时用什么编码,终端必须用它来解码
如果终端是 UTF-8,但这两项是 latin1 或 gbk,必然乱码;反过来,终端是 GBK(如老版 Windows CMD),而它们是 utf8mb4,也一样乱。
临时修复:每次登录后用 SET NAMES
在 MySQL 提示符下直接运行:SET NAMES utf8mb4;
等价于同时设置:SET character_set_client = utf8mb4;SET character_set_connection = utf8mb4;SET character_set_results = utf8mb4;
这个操作只对当前会话有效。适合快速验证是否是编码问题,或临时调试。注意:SET NAMES gbk; 在中文 Windows CMD 下更稳妥,但前提是终端确实用了 GBK(可用 chcp 查看)。
永久生效:配置 ~/.my.cnf 客户端段落
在用户主目录下创建或编辑 ~/.my.cnf(Linux/macOS)或 %USERPROFILE%\my.cnf(Windows),写入:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4
这样每次用 mysql -u ... 命令启动客户端时,自动把 character_set_client 和 character_set_results 设为 utf8mb4。不需要重启 MySQL 服务,也不影响服务端配置。
⚠️ 注意:[client] 段影响所有客户端工具(如 mysql、mysqldump),而 [mysql] 段只影响 mysql 命令行客户端本身。
终端编码必须真实匹配,否则一切白搭
配置完 MySQL 客户端,终端本身还得“配合演出”:
- macOS Terminal:偏好设置 → 描述文件 → 高级 → 字符编码选 “Unicode (UTF-8)”
- Linux 终端(GNOME/Konsole):设置里确认编码是 UTF-8;可执行
locale | grep UTF验证 - Windows CMD:
chcp 65001切到 UTF-8;若失败(老系统不支持),改用chcp 936+SET NAMES gbk - Windows Terminal / PowerShell:默认 UTF-8,但需确认设置中未禁用
最易被忽略的是:终端字体是否支持你要显示的字符(比如 emoji 需要支持 Unicode 14+ 的字体)。即使编码全对,字体缺字也会显示为方块或问号。


















