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

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

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

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

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

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

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

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

  • 客户端/连接/结果:utf8/utf8mb4(正常)
  • 服务端核心:character_set_server = latin1(病根)

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服务

  • Windows:服务列表重启MySQL服务
  • Linux:systemctl restart mysqld

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中文乱码的资料请关注脚本之家其它相关文章!

相关文章

  • 几个MySQL高频面试题的解答

    几个MySQL高频面试题的解答

    这篇文章主要介绍了几个MySQL高频面试题的解答,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2021-01-01
  • MySQL主机因多次连接数据库错误而被阻塞的解决方案

    MySQL主机因多次连接数据库错误而被阻塞的解决方案

    文章讲述了MySQL数据库连接失败导致主机被阻塞的问题,分析了原因,并提供了两种解决方法:调整max_connect_errors参数和执行FLUSH HOSTS命令
    2025-12-12
  • mysql delete的用法介绍及举例

    mysql delete的用法介绍及举例

    MySQL的DELETE语句用于删除数据库表中的记录,支持单条、多条及复杂条件删除,通过WHERE子句指定条件,可结合子查询、LIMIT、JOIN等实现高级操作,如删除关联数据或重复记录,需谨慎使用,避免误删,建议先备份数据
    2025-07-07
  • 基于MYSQL中优化的一些方法

    基于MYSQL中优化的一些方法

    本篇文章是对MYSQL中优化的一些方法进行了详细的介绍,需要的朋友参考下
    2013-05-05
  • 数据结构-树(三):多路搜索树B树、B+树

    数据结构-树(三):多路搜索树B树、B+树

    这篇文章主要介绍了多路搜索树B树、B+树,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySQL定时备份数据库(全库备份)的实现

    MySQL定时备份数据库(全库备份)的实现

    本文主要介绍了MySQL定时备份数据库(全库备份)的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • SQL和NoSQL之间的区别总结

    SQL和NoSQL之间的区别总结

    在本篇内容里我们给大家精选了关于SQL和NoSQL之间的区别的总结内容,对此有需要的朋友们跟着学习下。
    2019-02-02
  • 解决MySql版本问题sql_mode=only_full_group_by

    解决MySql版本问题sql_mode=only_full_group_by

    这篇文章主要介绍了解决MySql版本问题sql_mode=only_full_group_by,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • MySql 8.0.11安装配置教程

    MySql 8.0.11安装配置教程

    这篇文章给大家介绍了MySql 8.0.11安装配置教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2018-05-05
  • mysql中的limit用法有哪些(推荐)

    mysql中的limit用法有哪些(推荐)

    在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢,mysql已经为我们提供了这样一个功能,尽管语法逻辑很是怪异,这个功能就好比oracle里的rownum,但比mysql提供的这个LIMIT好用、好记和好理解多了,具体内容一起通过本文看看吧
    2017-10-10

最新评论