8人参与 • 2026-08-03 • Mysql
很多开发者都遇到过这种奇葩场景:mysql客户端、连接、结果编码全是 utf-8,但在 navicat 中查询中文乱码、表格筛选乱码、excel导入中文问号。
核心症结只有一个:character_set_server=latin1(服务端编码为拉丁字符集)。
本文一次性讲透:临时急救方案+永久根治方案,彻底解决所有navicat中文乱码问题。
数据库典型异常编码分布:
character_set_server 是mysql只读启动参数,无法通过sql命令临时修改,只能改配置文件+重启数据库生效,所有新建库、表都会默认继承该编码。
✅ 字母乱码(汉å):可修复,仅客户端解析异常,数据本身未损坏。
❌ 问号乱码(???):不可逆,插入数据时被latin1截断丢失,只能重新导入备份数据。
误区1:可通过set命令修改server编码
完全不行!执行 set character_set_server = utf8mb4; 会直接报错:只读变量无法修改,只能改配置重启。
误区2:客户端utf-8就不会乱码
服务端为latin1时,旧数据可临时修复显示,但新库、新表、新数据一定会变成问号损坏。
误区3:navicat查询和筛选共用会话
navicat顶部筛选器会新建独立会话,这就是「查询正常、筛选乱码」的核心原因。
适合线上应急、暂时无法重启数据库的场景,解决查询、筛选乱码。
操作步骤:
set names utf8mb4; set character_set_client=utf8mb4; set character_set_results=utf8mb4;
优缺点:即时生效、无需重启;仅当前连接有效,无法避免新数据存储乱码。
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
systemctl restart mysqld执行sql,确保所有编码为utf8mb4:
show variables like 'character_set%';
# 修改数据库编码 alter database 库名 character set utf8mb4 collate utf8mb4_unicode_ci; # 转换数据表编码(保留原有数据) alter table 表名 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
excel直接导入极易乱码,推荐最优方案:
若中文显示为□方框,属于字体缺失,和编码无关:
character_set_server=utf8mb4mysql中文乱码的核心从来不是客户端配置,而是服务端server编码不统一。临时set names只能解决显示问题,只有彻底修改服务端编码、统一全链路utf8mb4,才能从根源杜绝所有中文乱码问题。
以上就是navicat+mysql中文乱码的完整解决方案的详细内容,更多关于navicat+mysql中文乱码的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论