database client 无法连接 mysql 8.0+ 默认认证方式,因其不支持 caching_sha2_password 插件,需改用 mysql_native_password;可通过创建兼容账号或修改用户认证方式解决,并确保连接配置中使用 127.0.0.1、显式端口及正确权限。

Database Client 扩展不能直接连接 MySQL 8.0+ 默认认证方式的数据库,常见报错是 ER_NOT_SUPPORTED_AUTH_MODE 或连接后查询无响应——本质是它不支持 caching_sha2_password 插件,必须切换为 mysql_native_password。
为什么连不上?先看认证插件是否被支持
VSCode 的 Database Client(v5.x+)底层用的是 Node.js 的 mysql2 驱动,但默认未启用对 MySQL 8.0 新默认认证方式 caching_sha2_password 的完整支持。即使用户名密码正确,也会静默失败或报错。
- 检查当前用户认证方式:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user'; - 若返回
caching_sha2_password,基本就是这个原因 - PostgreSQL、SQLite、SQL Server 通常无此问题;MySQL 5.7 及以下默认用
mysql_native_password,一般可直连
怎么改认证方式?别在生产库上直接 ALTER USER
临时调试可以改,但线上环境建议新建专用账号并指定旧插件,避免影响现有应用。
- 登录 MySQL(用 root 或高权限账号):
mysql -u root -p - 创建兼容账号(推荐):
CREATE USER 'vscode_dev'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_pass'; - 授权:
GRANT SELECT, SHOW VIEW ON your_db.* TO 'vscode_dev'@'localhost'; FLUSH PRIVILEGES; - 如必须改已有用户(仅限本地开发库):
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'same_password';
VSCode 里怎么填连接配置?注意 URL 格式和端口
Database Client 不走传统表单,而是用连接字符串(URI)或 JSON 配置。MySQL 必须显式写协议头,且端口不能省略(即使默认 3306)。
- 推荐用 JSON 模式(更清晰):在 VSCode 命令面板执行
Database: Add Connection→ 选 MySQL → 粘贴如下:
{
"name": "local-mysql",
"host": "127.0.0.1",
"port": 3306,
"database": "test_db",
"user": "vscode_dev",
"password": "your_strong_pass"
}
- 如果用 URI,必须带
mysql://前缀,且密码需 URL 编码:mysql://vscode_dev:your%40pass@127.0.0.1:3306/test_db - 不要填
localhost——某些系统会走 socket 而非 TCP,改成127.0.0.1更稳 - SSL 默认关闭;如需开启,加字段
"ssl": true,但自签名证书需额外配"sslRejectUnauthorized": false
连上了却查不出表?检查默认 schema 和权限范围
连接成功不代表能查任意表。Database Client 默认只加载当前 database 下的对象,且依赖账号权限粒度。
- 确认连接时指定了
database字段;否则左侧面板可能为空(不是 bug,是没选库) - 如果用
*通配授权但依然看不到表,检查是否漏了SHOW DATABASES权限(部分操作需要) - 执行查询时若提示
Table doesn't exist,先右键连接名 →Change Database切换到目标库,再运行SELECT * FROM users; - 不支持跨库 JOIN 的自动补全;写
other_db.table_name要手动敲全名
最常被忽略的是:MySQL 用户 host 限定(比如只允许 'user'@'192.168.%'),而 VSCode 连接走的是 127.0.0.1,host 不匹配就会拒绝——这时得建 'user'@'127.0.0.1' 或 'user'@'localhost' 两个账号。











