sqltools 连不上数据库需先确认驱动和连接字符串格式:postgresql 用 psql、mysql 依赖 mysql 命令行工具、sqlite 必须用绝对路径;连接字符串须为标准 uri 格式,如 postgresql://user:pass@localhost:5432/mydb。

SQLTools 插件装完连不上数据库?先确认驱动和连接字符串格式
SQLTools 本身不带数据库驱动,得靠你手动装对应语言的 CLI 工具或客户端库。比如连 PostgreSQL,它默认调用 psql;连 MySQL,依赖 mysql 命令行工具;SQLite 直接读文件,但路径必须是绝对路径。
常见错误现象:Connection failed: Command "psql" not found 或 Failed to connect: invalid connection string。根本原因是 SQLTools 没法自动猜你用什么协议、端口、用户——它只解析你填的连接字符串(URI 格式)。
- PostgreSQL 示例连接字符串:
postgresql://user:pass@localhost:5432/mydb,注意不是postgres://(旧版兼容但不稳定) - MySQL 要求 8.0+ 默认用
caching_sha2_password插件,如果服务端没配好,会卡在认证,建议临时改用mysql_native_password - SQLite 连接字符串必须写成
sqlite:///absolute/path/to/db.sqlite,相对路径一律失败 - SQL Server 需要额外安装
sqlcmd并确保PATH可见,Windows 上常因权限或实例名(localhost\SQLEXPRESS)出错
多个数据库同时管理时,怎么避免查询发错目标?
SQLTools 的“活动连接”是全局状态,不是按文件或文件夹隔离的。你在哪个 SQL 文件里按 Ctrl+Enter,就往当前选中的连接发请求,跟文件名、目录、甚至后缀都无关。
容易踩的坑:开着两个 .sql 文件,左边连的是测试库,右边连的是生产库,但你忘了切换右下角状态栏里的连接名,一执行就直接操作了生产环境。
- 右下角连接名点击可快速切换,但不会高亮当前文件绑定的连接——它压根不绑定
- 可以给每个连接起明确名字(比如
prod-postgres-01、staging-mysql),别用默认的localhost - 执行前务必看右下角,养成习惯点一下确认;误操作没法撤回,SQLTools 不做事务包装
- 如果真要隔离,只能靠多开 VSCode 窗口,每个窗口只开一个连接(不推荐,资源浪费)
查询结果乱码、中文显示为问号?重点查客户端编码设置
不是 VSCode 字体问题,也不是 SQLTools 设置问题,而是数据库客户端启动时没指定字符集。SQLTools 启动 psql 或 mysql 时,完全复用系统 locale 和环境变量,不主动加 --set=client_encoding=utf8 这类参数。
典型表现:查询返回字段名正常,但中文字段值全是 ??? 或空格;建表语句里中文注释也丢。
- PostgreSQL:在用户家目录下建
~/.psqlrc,加一行set CLIENT_ENCODING 'UTF8' - MySQL:配置文件
~/.my.cnf的[client]段里加default-character-set = utf8mb4 - Windows 上若用 Git Bash 启动 VSCode,注意终端 locale 可能是
C,导致psql启动时编码降级 - 重启 VSCode 才能刷新环境变量,改完配置别忘了关重开
SQLTools 自动补全不准、表名不提示?不是插件坏了,是元数据没加载
补全依赖连接成功后的 schema 元数据拉取,而这个动作默认是懒加载——只有你第一次展开“Databases”侧边栏,或手动右键“Refresh”时才触发。没点过,就永远只有基础关键字补全。
另一个干扰项:某些数据库(如 MySQL 8.0+)默认关闭 information_schema 的访问权限,或者用户没被授予 SELECT 权限,导致 SQLTools 请求 SHOW TABLES 或 SELECT * FROM information_schema.tables 直接报错静默失败。
- 打开侧边栏的
Databases视图,找到你的连接,点右侧刷新图标(两个箭头绕圈) - 如果刷新后仍无表列表,打开 VSCode 输出面板,选
SQLTools,看有没有类似Access denied for user 'xxx'@'%' to database 'information_schema' - PostgreSQL 用户需有
pg_catalog和information_schema的使用权限,不能只给单个 schema - 补全只对当前连接生效,换连接后要重新刷新,没有跨连接缓存
最麻烦的其实是权限链路太长:数据库用户权限 → 客户端工具行为 → VSCode 环境变量 → SQLTools 解析逻辑。任一环断掉,表现都是“连上了但不好使”,得一段段排除,不能只盯着插件设置看。











