database client(作者cweijan)是连接mysql最省事的方案,因其原生支持mysql 5.7~8.4及caching_sha2_password认证,无需额外驱动或java环境,填完host/port/user/password/database四字段即可测试连接成功。

连 MySQL 最省事的方案就是用 Database Client(作者 cweijan),不是 SQLTools,也不是 MySQL Syntax——后者只高亮,前者配置复杂、容易卡在驱动加载失败。填完 host/port/user/password/database 四个字段,点测试就能通,不报 Client does not support authentication protocol,也不需要装 Java 或额外二进制。
为什么 Database Client 比 SQLTools 更适合单 MySQL 场景
SQLTools 是平台型插件,自己不带驱动,必须额外装 SQLTools MySQL Driver;但这个过程极易出错:搜错名字、没重启 VS Code、驱动未启用,都会导致连接失败,日志却只显示 Connection refused,实际是驱动根本没加载。而 Database Client 原生打包了 MySQL 5.7~8.4 支持,包括 caching_sha2_password 认证,不依赖外部运行时。
- 连接表单直填,不用手动编辑
connections.json或config.json - 右键表名 →
Generate SELECT statement,避免手敲拼错 - 侧边栏实时刷新结构树,建表/改字段后立刻可见,不用手动 F5
填错 host 或 database 导致 Connection refused / No database selected
localhost 在 Docker、WSL2、Mac M1 场景下大概率连不通,因为 VS Code 进程运行在宿主系统,而 MySQL 实际监听的是容器或子系统 IP。
- Docker:host 填
host.docker.internal(Windows/macOS)或网关 IP(Linux),port 填宿主映射端口(如3307),不是容器内3306 - WSL2:执行
cat /etc/resolv.conf | grep nameserver,取nameserver后的 IP - Mac M1 + Rosetta:尝试把
localhost换成127.0.0.1 -
Database字段必须填具体库名(如myapp_dev),留空会导致SELECT * FROM users直接报Table 'users' doesn't exist
INSERT 后查不到数据,但语法和连接都正常
大概率是事务没提交。虽然 Database Client 默认开启 autocommit=1,但某些连接参数(比如手动加了 options=--init-command="SET autocommit=0")会把它关掉。
- 执行完
INSERT后,立刻跑SELECT LAST_INSERT_ID(),有返回值说明已写入内存,只是没刷到磁盘 - 显式加
COMMIT;,或开头先执行SET autocommit = 1; - 检查连接配置里有没有
"options"字段,删掉含autocommit=0的参数 - 注意:SQLite 不支持单独
COMMIT,得用BEGIN; INSERT; COMMIT;包起来
SQL 文件中文乱码或导出失败
VS Code 插件读文件时按 UTF-8 解码,但若你用记事本保存 SQL 文件,默认是 GBK;或者插件发送字符集与 MySQL 服务端不一致,就会出现乱码。pg_dump 类导出失败则多因路径不对——插件不走系统 PATH,而是严格按设置项找。
- SQL 文件务必用 VS Code 自己另存为 UTF-8 编码(右下角点击编码 → Save with Encoding → UTF-8)
- MySQL 服务端确认
character_set_client、character_set_connection、character_set_database都是utf8mb4 - PostgreSQL 导出失败?终端执行
pg_config --bindir找到真实pg_dump路径,VS Code 设置里填绝对路径,别用~或$HOME
最容易被忽略的是 Database 字段留空和密码含 @、/ 等特殊字符——前者直接让所有查询报错,后者需 URL 编码(如 my@pwd → my%40pwd)。这些细节不报明显错误,只静默失败或返回空结果。











