Sublime Text 不能真正连接数据库,它只是通过插件(如SQLTools)调用mysql、psql等CLI工具执行查询,每次均为独立进程,不共享连接、不支持事务、无异步I/O或超时控制。

Sublime 能不能真正“连接”数据库
不能。Sublime Text 是纯文本编辑器,没有网络栈、没有数据库驱动、也没有会话维持能力。所谓“连接”,只是插件在后台调用 mysql、psql 或 sqlite3 这类 CLI 工具,执行完就断开——每次查询都是全新进程,不共享连接、不保留事务状态、不缓存元数据。
SQLTools 插件执行的是同步还是异步查询
表面看是“异步”(按 Ctrl+Shift+E 后编辑器不卡死),但底层仍是同步阻塞式调用:插件 fork 出一个子进程运行 CLI 命令,等待 stdout/stderr 返回后才解析并显示结果。它不支持真正的异步 I/O(比如非阻塞 socket 或协程),也不支持查询中途取消(SIGINT 通常被 CLI 工具忽略或处理不一致)。
- 如果你执行
SELECT SLEEP(10),Sublime 界面会响应迟滞,输出面板要等满 10 秒才刷出结果 - 长查询期间无法再发新请求(除非新开一个窗口或标签页)
- 没有超时控制机制,CLI 进程卡住时只能手动 kill
配置 SQLTools 时最容易错的三处
不是密码写错,而是路径、字段名和权限这三点常被忽略:
-
executablePath必须填绝对路径(如/usr/local/bin/mysql),不能只写mysql—— Sublime 的构建环境 PATH 和终端不同,尤其 macOS 上 Homebrew 安装的命令常不在默认 PATH 中 - MySQL 连接配置里用的是
user和password,不是username或pwd;PostgreSQL 则要求user,但部分旧版 SQLTools 文档误写成username,会导致认证失败且无明确报错 - SQLite 不需要 host/port/user/password,但必须确保
database字段指向可读写的绝对路径(如/Users/me/project/db.sqlite),相对路径会被解析为 Sublime 启动目录,而非当前 .sql 文件所在目录
为什么查询结果有时为空或报 “command not found”
核心原因就两个:CLI 工具没装好,或者插件没拿到它的输出。
- 先在终端运行
mysql --version或psql --version,确认能执行;如果报 command not found,说明系统没装客户端,或没加进全局 PATH - SQLTools 默认不合并 stderr,而 MySQL 错误(如 Access denied)全走 stderr,结果面板只显示 stdout——看起来像“没输出”,其实是错误被丢弃了。需手动修改插件设置,在
SQLTools.sublime-settings中加:"show_stderr": true - 密码含特殊字符(如
$、@、/)时,JSON 配置里必须用反斜杠转义,否则解析失败导致连接静默降级为无认证模式


















