Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > Navicat+MySQL中文乱码

Navicat+MySQL中文乱码的完整解决方案

作者:学亮编程手记

很多开发者都遇到过这种奇葩场景:MySQL客户端、连接、结果编码全是 UTF-8,但在 Navicat 中查询中文乱码、表格筛选乱码、Excel导入中文问号,本文一次性讲透临时急救方案+永久根治方案,彻底解决所有Navicat中文乱码问题,需要的朋友可以参考下

一、前言:最常见的诡异乱码问题

很多开发者都遇到过这种奇葩场景:MySQL客户端、连接、结果编码全是 UTF-8,但在 Navicat 中查询中文乱码、表格筛选乱码、Excel导入中文问号

核心症结只有一个character_set_server=latin1(服务端编码为拉丁字符集)。

本文一次性讲透:临时急救方案+永久根治方案,彻底解决所有Navicat中文乱码问题。

二、乱码核心根源(99%人踩坑)

数据库典型异常编码分布:

character_set_server 是MySQL只读启动参数,无法通过SQL命令临时修改,只能改配置文件+重启数据库生效,所有新建库、表都会默认继承该编码。

两种乱码一定要分清

字母乱码(汉å­):可修复,仅客户端解析异常,数据本身未损坏。

问号乱码(???):不可逆,插入数据时被latin1截断丢失,只能重新导入备份数据。

三、全网通用三大错误误区

误区1:可通过SET命令修改server编码

完全不行!执行 SET character_set_server = utf8mb4; 会直接报错:只读变量无法修改,只能改配置重启。

误区2:客户端UTF-8就不会乱码

服务端为latin1时,旧数据可临时修复显示,但新库、新表、新数据一定会变成问号损坏

误区3:Navicat查询和筛选共用会话

Navicat顶部筛选器会新建独立会话,这就是「查询正常、筛选乱码」的核心原因。

四、临时急救(无需重启,立刻恢复显示)

适合线上应急、暂时无法重启数据库的场景,解决查询、筛选乱码。

操作步骤:

  1. 右键数据库连接 → 编辑连接 → 高级
  2. 取消「使用MySQL字符集自动选择」
  3. 字符集选择 utf8mb4
  4. 初始化命令填入以下代码:
SET NAMES utf8mb4;
SET character_set_client=utf8mb4;
SET character_set_results=utf8mb4;
  1. 关闭所有数据库标签,重新打开连接即可生效

优缺点:即时生效、无需重启;仅当前连接有效,无法避免新数据存储乱码。

五、永久根治(一劳永逸,彻底解决乱码)

1. 修改MySQL配置文件

Windows修改my.ini,Linux修改 my.cnf,替换完整配置:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake

2. 重启MySQL服务

3. 验证配置

执行SQL,确保所有编码为utf8mb4:

SHOW VARIABLES LIKE 'character_set%';

4. 修复存量库表编码

# 修改数据库编码
ALTER DATABASE 库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 转换数据表编码(保留原有数据)
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

六、Excel导入中文乱码专属解决方案

Excel直接导入极易乱码,推荐最优方案:

  1. 将Excel另存为 **CSV UTF-8(逗号分隔)**格式,兼容性最强,基本零乱码
  2. 导入时手动选择UTF-8编码,不使用自动检测
  3. 手机号、数字长字段提前设置为文本格式,避免科学计数失真
  4. 确保目标数据表编码为utf8mb4

七、界面方框乱码解决(字体问题)

若中文显示为□方框,属于字体缺失,和编码无关:

  1. Navicat工具 → 选项 → 记录
  2. 网格字体改为微软雅黑/Noto Sans CJK SC
  3. 重启Navicat即可

八、快速排查清单(收藏备用)

  1. ✅ 服务端编码 character_set_server=utf8mb4
  2. ✅ Navicat连接配置utf8mb4+初始化编码命令
  3. ✅ 数据库、数据表统一utf8mb4编码
  4. ✅ 数据导入优先使用UTF-8 CSV格式
  5. ✅ 界面异常优先更换中文字体、重连会话

结语

MySQL中文乱码的核心从来不是客户端配置,而是服务端server编码不统一。临时SET NAMES只能解决显示问题,只有彻底修改服务端编码、统一全链路utf8mb4,才能从根源杜绝所有中文乱码问题。

以上就是Navicat+MySQL中文乱码的完整解决方案的详细内容,更多关于Navicat+MySQL中文乱码的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文