Navicat连ClickHouse出现中文乱码怎么办_字符集编码调整
Navicat连ClickHouse中文显示问号或方块的根本原因是连接未显式声明UTF-8编码需在连接字符串中添加?charsetUTF-8JDBC或charsetUTF-8ODBC/原生并确保驱动版本支持clickhouse-jdbc 0.3.2同时SQL编辑器编码设为UTF-8。Navicat 连 ClickHouse 中文显示问号或方块先看连接层编码根本原因不是 clickhouse 服务端没设 utf8而是 navicat 建立连接时没告诉 clickhouse“我要用 utf-8 传数据”。clickhouse 默认按 utf-8 解析但 navicat 的 jdbc 或原生协议连接若未显式声明编码会 fallback 到系统 locale比如 windows 上是 gbk导致握手阶段就错位。实操建议在 Navicat 新建或编辑 ClickHouse 连接时点开 高级 选项卡 → 找到 Connection String连接字符串输入框在已有参数后追加?charsetUTF-8JDBC 驱动或 charsetUTF-8ODBC/原生协议视驱动而定如果用的是 clickhouse-jdbc推荐完整示例jdbc:clickhouse://127.0.0.1:8123/default?charsetUTF-8useUnicodetrue改完务必点 测试连接不是只保存——很多乱码问题改了不重连根本无效ClickHouse 服务端的 charset 配置其实不控制客户端通信很多人去翻 /etc/clickhouse-server/config.xml想找 charset 或类似字段白忙。ClickHouse 本身没有“服务端字符集开关”这种设计它只认字节流只要客户端发来的是合法 UTF-8 字节它就存返回时也原样发回。所谓“服务端编码”其实是客户端和协议的事。真正要检查的只有两处SELECT * FROM system.settings WHERE name LIKE %charset% —— 结果为空才正常有值反而可能被旧配置误导SHOW CREATE TABLE 查表 DDL确认 ENGINE 后没带奇怪的 CHARSETxxxClickHouse 表引擎不支持这个语法写了会报错如果用 MySQL 兼容模式 接入比如通过 mysql_port需额外确认 mysql_port 对应的 tcp_port 配置里没启用 skip_utf8_check默认关着别动INSERT 中文数据进不去重点查 Navicat 的 SQL 执行模式即使连接字符串加了 charsetUTF-8在 Navicat 里直接写 INSERT INTO t VALUES (中文) 仍可能失败错误信息常是Code: 62. DB::Exception: Cannot parse string... 或更隐蔽的截断只存前几个字。这是因为 Navicat 默认用“语句执行”而非“脚本执行”对非 ASCII 字符的编码处理不稳定。解决方式很具体 博特妙笔 公职人员公文写作平台集查、写、审、学为一体。