database client 连不上 mysql 8.0+ 的根本原因是认证插件不兼容 caching_sha2_password,需新建 mysql_native_password 账号、显式配置端口与 uri 格式、注意会话隔离及路径大小写。

Database Client 连不上 MySQL 8.0+?先查 caching_sha2_password
连不上不是密码错,也不是网络不通,大概率是认证插件不兼容。VSCode 的 Database Client(v5.x+)底层用 mysql2 驱动,但默认不启用对 caching_sha2_password 的完整支持——这是 MySQL 8.0 默认启用的认证方式。
验证方法:用命令行登录 MySQL,执行:SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
如果 plugin 字段返回 caching_sha2_password,就坐实了问题根源。
- 别直接
ALTER USER改生产库账号,风险高、影响现有服务 - 本地开发可新建专用账号:
CREATE USER 'vscode_dev'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123'; - 授权后记得
FLUSH PRIVILEGES;,否则权限不生效 - 连接时 Host 填
127.0.0.1,别用localhost(后者可能走 socket,扩展不支持)
MySQL 连接配置必须显式写端口和协议头
Database Client 不接受“隐式默认”:哪怕你连的是本地 MySQL 默认 3306 端口,也必须在配置里明确填 port: 3306,否则会报 getaddrinfo ENOTFOUND localhost:3306 这类看似 DNS 实际是格式错误的提示。
它实际解析的是连接字符串(URI),所以正确写法是:mysql://vscode_dev:pass123@127.0.0.1:3306/my_db
而不是靠表单字段自动拼接。
- Host 字段只填地址,不要带冒号和端口(如
localhost:3306是错的) - Port 字段必须是非空数字,不能留空或填字符串
"3306" - Database 字段区分大小写,且必须真实存在,填错会静默失败或报
Unknown database
查询执行不是事务会话,变量和 SET 不跨语句
每次 Ctrl+Enter 执行的 SQL 都在一个全新会话中运行,SET @var := 1; 和后续 SELECT @var; 分两行执行,第二条必然报错——因为变量作用域只在当前会话,而会话已结束。
同样,BEGIN; UPDATE ...; COMMIT; 三行一起选中执行,也不保证原子性:扩展按光标位置或语句分隔符切分执行单元,COMMIT 可能单独提交前一条 UPDATE,也可能因语法错误跳过。
- 临时变量、会话级配置(如
SET NAMES utf8mb4)无法复用,得每条都带上 - 想模拟事务,只能把多条语句合并成一个块(用
DELIMITER+ 存储过程,或用客户端工具) - 大结果集默认限制 1000 行,改设置
databaseclient.maxRows时小心卡死 UI
SQLite 和 PostgreSQL 一般不用调认证,但路径和大小写要盯紧
SQLite 最简:填 database 字段为绝对路径(如 /path/to/app.db),相对路径不解析;PostgreSQL 则对 database 名严格大小写,填 postgres 没问题,但填 Postgres 就报 database "Postgres" does not exist。
PostgreSQL 还依赖 user 和 host 匹配 pg_hba.conf 规则,若连不上,优先检查该文件里是否允许 127.0.0.1 上的 md5 认证,而不是瞎试 SSL 开关。
- SQLite 的
database路径必须存在且进程有读写权限,否则连接成功但查表时报no such table - PostgreSQL 的
user若没指定database,会默认连同名数据库,不存在就失败 - Redis 连接不走用户名密码,只认
password字段,且空密码要显式填"",不能留空











