vscode需通过mysql兼容协议连接clickhouse,而非原生端口或协议;必须启用服务端mysql接口(如cloud选mysql连接、自建改config.xml),database client中选mysql类型并填正确host:port:user(如mysql4xxx@xxx.us-east1.aws.clickhouse.cloud:3306)。

VSCode 本身不支持 ClickHouse,必须靠扩展 + 正确启用 MySQL 协议才能连上;直接填 ClickHouse 原生端口(9000)或选“ClickHouse”类型连接,100% 失败。
Database Client 扩展不支持原生 ClickHouse 协议
目前主流 VSCode 数据库扩展(Database Client、SQLTools、官方 MySQL 插件)都不内置 ClickHouse 驱动。它们只认标准协议:MySQL、PostgreSQL、SQLite 等。ClickHouse 虽然提供 HTTP 接口,但 VSCode 扩展几乎不支持——Database Client 的协议列表里根本没有 ClickHouse 选项。
你看到的“ClickHouse 支持”宣传,基本都指它能通过 MySQL 兼容接口间接连接,而非原生支持。
- 别在
Database Client新建连接时选 “ClickHouse” —— 根本没有这个选项 - 别尝试用
SQLTools+SQLTools Driver for ClickHouse—— 该驱动已多年未更新,对 ClickHouse Cloud 和 v23+ 版本完全失效 - 本地部署的 ClickHouse 若未开启 MySQL 接口(默认关闭),
host:localhost port:9000必然报错Connection refused
必须启用 ClickHouse 的 MySQL 兼容接口
ClickHouse Cloud 或自建集群要被 VSCode 连上,第一步不是配 VSCode,而是让 ClickHouse 主动“伪装成 MySQL”。这需要服务端显式开启 MySQL 协议监听,且开放对应端口(通常是 3306)。
以 ClickHouse Cloud 为例:
- 进入服务详情页 → 左侧选 Connect → Connect With 下拉菜单选
MySQL→ 开启开关 - 操作后会生成一个专属 MySQL 连接地址,形如
xxx.us-east1.aws.clickhouse.cloud:3306,不是原来的9000端口 - 用户名格式固定为
mysql4xxx(xxx是子域名),密码与主账号一致,但必须用 double SHA1 加密(Cloud 控制台已自动处理)
自建 ClickHouse 则需手动修改配置文件:/etc/clickhouse-server/config.xml 中添加 <mysql_port>3306</mysql_port> 并重启服务。
用 Database Client 连 MySQL 接口时的关键配置项
确认服务端已启用 MySQL 接口后,在 Database Client 中新建连接,类型选 MySQL,但以下字段极易填错:
-
host:填 ClickHouse Cloud 提供的完整域名(如foobar.us-east1.aws.clickhouse.cloud),不能省略.aws.clickhouse.cloud后缀 -
port:必须是3306,不是9000或8123 -
user:必须是mysql4foobar这类格式,不是你的原始用户名;大小写敏感 -
database:可留空,或填具体数据库名(如default),但注意 ClickHouse 的database对应 MySQL 的 schema 概念,填错不会报连不上,但后续查表提示Table not found -
Connection Options(高级选项)里加一行:"charset": "utf8mb4",否则中文字段显示为???
连接成功后,左侧 Database Explorer 会列出数据库,但只能展开到 Tables 层级;Views、Functions 等对象不会显示 —— 这是 MySQL 协议限制,不是插件 bug。
查询执行与结果查看的实操边界
连上只是第一步,ClickHouse 的行为和 MySQL 差异很大,VSCode 扩展对此无感知,容易踩坑:
-
SELECT *默认不限行数,但大结果集(>5 万行)会卡死 UI;务必手动加LIMIT,或在设置里调低databaseclient.maxRows -
EXPLAIN语句返回的是文本块,不是表格,Database Client不做解析,看不出执行计划细节 - 写操作(
INSERT、CREATE TABLE)能执行,但错误信息常被截断;比如因ENGINE不支持而失败,只报Code: 60,得切到clickhouse-client查完整报错 - 时间函数(
now64()、toDateTime64())语法高亮失效,因为Database Client的 MySQL 语法引擎不认识 ClickHouse 特有函数
真正麻烦的不是连上,而是你误以为这是个“正常 MySQL”,直到 GROUP BY 慢得离谱、JOIN 报错、或导出 CSV 时字段含换行符导致格式错乱才反应过来——它底层仍是列存引擎,协议只是个翻译层。











