Navicat for Redis 默认使用 ISO-8859-1 解码,导致 UTF-8 中文显示乱码;需在连接设置的 SSL 标签页启用自定义字符集并选 UTF-8,且重启连接生效。
Redis客户端显示中文是乱码,Navicat默认用什么编码?
navicat for redis 默认使用 iso-8859-1 解码响应内容,而 redis 本身不处理字符编码——它只存字节流。你存的是 utf-8 编码的中文字符串,navicat 却用 latin-1 去读,自然显示成 æä¸ªå符串 这类乱码。
这不是 Redis 配置问题,也不是 Navicat “坏了”,而是解码端(Navicat)和编码端(你的应用写入时)没对齐。
实操建议:
- 确认你写入 Redis 的值确实是 UTF-8 编码(比如 Python 用
redis.set("key", "你好")默认就是 UTF-8;Java 若用Jedis.set()传 String,也默认 UTF-8) - Navicat 中不要改 Redis 服务端配置(
redis.conf没有 charset 选项)——改了也没用 - 关键动作在 Navicat 客户端:必须手动切换字符集
怎么在Navicat里强制用UTF-8显示Redis数据?
Navicat for Redis 自 16.0.21 起支持手动设置字符集,但入口藏得深,且不自动继承系统语言。
操作路径(Windows/macOS 一致):
- 连上 Redis 连接后,右键该连接 → 编辑连接
- 切到 SSL 标签页(别去“常规”或“高级”)→ 往下拉到底
- 勾选 Use custom character set → 在下拉框中选
UTF-8 - 点确定,**必须重启该连接**(断开再重连),旧的查询窗口不会自动刷新编码
注意:UTF-8 是唯一可靠选项;GBK 或 GB2312 只对部分旧系统有效,且和现代应用栈不兼容。
改完还是乱码?检查这三处常见漏点
即使设了 UTF-8,仍乱码,大概率卡在这几个实际场景里:
- 你查的是
KEYS *或SCAN返回的 key 名本身 —— 如果 key 是程序用非 UTF-8 编码生成的(比如某段 C# 代码用Encoding.Default写 key),那 Navicat 用 UTF-8 解 key 名当然错 - 字段值是序列化后的二进制(如
pickle、Java Serializable、Protobuf),Navicat 当纯文本渲染,必然乱——这种不能靠改字符集解决,得用对应反序列化工具看 - Navicat 版本太老(Use custom character set 选项;检查版本号:帮助 → 关于 Navicat → 看完整版号,低于此版本只能换客户端(如
RedisInsight或Another Redis Desktop Manager)
为什么不用改Redis服务器配置?
因为 Redis 协议(RESP)设计上就不带编码声明。所有 value 都是 bulk string,本质是一段字节长度 + 原始字节流。它不像 MySQL 有 character_set_server 或 collation 这类概念。
所以:
-
redis.conf里没有charset、encoding、default_encoding这类配置项 - 执行
CONFIG GET *也搜不到任何编码相关参数 - 网上说“加
set charset utf-8到 redis.conf”的,都是混淆了 MySQL 或 PostgreSQL 的配置逻辑
真正要对齐的,只有两端:你写进去时用什么编码(通常是 UTF-8),和你读出来时用什么编码(Navicat 里设成一样)。
最易被忽略的一点:改完 Navicat 字符集后,之前已打开的查询结果窗口不会自动重解码,必须关掉重查。










