navicat 17 连 clickhouse 成败取决于协议、端口、认证三要素,90% 失败源于误选 mysql 驱动;必须手动选择 clickhouse 驱动(非 mysql/odbc),且仅支持原生协议 9000 端口,不支持 http 8123。

Navicat 17 连 ClickHouse 不靠“新功能”,靠选对驱动、填对端口、配对认证——三者错一个,连都连不上,更别说查数据。
必须选 ClickHouse 驱动,不是 MySQL 也不是 ODBC
Navicat 17 界面里“数据库类型”下拉菜单中仍有 MySQL 选项,但 90% 的连接失败就栽在这儿。ClickHouse 原生协议和 MySQL 协议完全不互通,服务端收到 MySQL 握手包直接断连,日志里只留 Connection refused,连鉴权环节都进不去。
- 新建连接时,类型必须手动选
ClickHouse(不是MySQL、不是ODBC、也不是PostgreSQL) - 如果列表里没有
ClickHouse选项,说明你装的是 Lite 版,或未启用 Premium 模块 - 旧版 Navicat(
端口填 9000,不是 8123,且云环境常不开放
Navicat 17 的 ClickHouse 驱动只支持原生 TCP 协议(即 9000 端口),不支持 HTTP 模式(8123)。这点和 DBeaver 不同,别被其他工具经验带偏。
-
Host填云厂商控制台明确写的“公网地址”,比如ck-xxx-public.clickhouse.aliyuncs.com,不是内网域名 -
Port必须是9000;若控制台只显示8123,说明原生端口未开放——此时 Navicat 走不通,得换工具或联系厂商开通 - 填了
8123却选ClickHouse驱动 → 报错Code: 210. DB::NetException: Connection refused
密码为空时,服务端必须允许空密码
本地或 Docker 启动的 ClickHouse 常用 default 用户且无密码,但 Navicat 会强制发空密码字段。若服务端 /etc/clickhouse-server/users.xml 中该用户没显式开启空密码许可,就会卡在认证环节。
- 检查
<user>default</user>段落,确认含<allow_empty_password>1</allow_empty_password> - 若节点不存在或值为
0,需手动添加或修改,并执行sudo systemctl restart clickhouse-server - 密码含特殊字符(如
@、/)不影响原生协议连接,但 HTTP 模式下需 URL 编码——不过 Navicat 不走 HTTP,这条可忽略
连上了却看不到表?手动刷新 + 避开 system 库
Navicat 的 ClickHouse 驱动元数据适配不完整:它默认尝试用 MySQL 风格语句查库表,而 ClickHouse 用的是 SELECT name FROM system.databases 这套逻辑,导致首次连接后库表结构空白。
- 连接成功后,别等自动加载,在左侧数据库列表右键 →
Refresh -
Default database字段建议留空;填了不存在的库名会直接报错退出 - 如果表太多(尤其含大量
system表),Navicat 加载可能卡顿;删掉不用的库比调max_rows_to_read更有效——因为元数据加载不受该参数控制
Code: 241. DB::Exception: Memory limit (for query) exceeded)——这问题不在连接配置里,而在每次点击“运行”前要不要加 LIMIT,以及是否在 Advanced 里设好 max_memory_usage。细节藏在每一次执行动作里,不是连上就完事。











