VSCode连不上MySQL主因是装错插件,应卸载仅语法高亮类插件,安装cweijan的Database Client;Docker/WSL2/M1等场景需用正确IP替代localhost;连接时须指定database字段;charset必须设为utf8mb4而非utf8。

VSCode 里连不上 MySQL,大概率是插件选错了
VSCode 本身不内置数据库连接能力,必须靠插件。但「Database Client」、「SQLTools」、「MySQL Syntax」这些名字太像,容易装错——MySQL Syntax 只负责高亮,Database Client(by cweijan)才真正支持连接和执行。
实操建议:
- 卸载所有带 “syntax”、“highlight”、“formatter” 字样的插件,它们不处理连接
- 只装
Database Client(作者 cweijan,图标是蓝色数据库+闪电),它支持 MySQL、PostgreSQL、SQLite 等,且无需额外服务端组件 - 别碰
SQLTools:配置复杂、依赖 Node.js 运行时,新手容易卡在SQLTools Server启动失败上 - 确认插件启用后,侧边栏会出现「Database」图标,点击才能进入连接管理界面
填 MySQL 连接参数时,host 和 port 别硬套 localhost:3306
本地 Docker 跑 MySQL?WSL2?Mac M1?这些场景下 localhost 在 VSCode 里往往连不通,因为 VSCode 进程运行在宿主系统,而 MySQL 实际监听的是容器或子系统 IP。
常见错误现象:Connection refused 或 Timed out after 5000 ms
实操建议:
- Docker:用
host.docker.internal(Windows/macOS)或容器所在网络的网关 IP(Linux)代替localhost;port填容器映射的宿主端口(如3307),不是容器内端口3306 - WSL2:在 WSL 里执行
cat /etc/resolv.conf | grep nameserver,取nameserver后的 IP 填入host,port填 MySQL 实际监听端口 - Mac M1 + Rosetta:MySQL 若跑在 Intel 兼容层,有时需改用
127.0.0.1而非localhost(DNS 解析差异) - 密码含特殊字符(如
@、/)?URL 编码一下,比如my@pwd→my%40pwd
执行 SQL 报错 “No database selected”,不是没连上,是没指定 schema
成功连接 MySQL 并不等于自动选中某个库。Database Client 默认不设置 database 参数,执行 SELECT * FROM users; 就会报这个错,和命令行里不执行 USE mydb; 是一个道理。
实操建议:
- 创建连接时,在「Database」字段明确填入库名(如
myapp_dev),不能为空 - 如果想临时切换库,右键已连接节点 → 「Change Database」,选目标库,否则新查询仍走默认库(或无库)
- 建表语句里带库前缀(如
CREATE TABLE myapp_dev.logs (...))可以绕过,但不推荐——耦合重、迁移麻烦 - 注意:修改连接配置后要右键该连接 → 「Reconnect」,不是保存就生效
中文乱码、emoji 插入失败,根源在 connection charset 没对齐
即使 MySQL 服务端 character_set_server=utf8mb4,VSCode 插件若用 utf8(MySQL 的旧别名,实际是 utf8mb3)建连接,就会丢 emoji、生僻字,甚至报 Incorrect string value。
实操建议:
- 连接配置里找
charset或collation字段,强制设为utf8mb4(不是utf8) - 没有显式 charset 选项?在「Advanced」或「Connection String」里补全:
?charset=utf8mb4&collation=utf8mb4_unicode_ci - 验证是否生效:连上后执行
SHOW VARIABLES LIKE 'character\_set\_%';,重点关注character_set_client、character_set_connection、character_set_results三者都应为utf8mb4 - 如果表本身是
utf8编码,光改连接没用——得ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
最常被忽略的一点:改完连接参数后,旧的查询窗口不会自动继承新编码,得新开一个 Query Tab 才生效。



















