Navicat 连不上 MySQL 时优先检查 host(填 127.0.0.1 而非 localhost)、port(注意 Docker 映射端口)和 username(区分 root@localhost 与 root@127.0.0.1);SSL 默认不勾选更稳定;乱码需设 Initial charset 为 utf8mb4 并核对 MySQL 字符集变量。
连接失败时先看这三项配置
navicat 连不上 mysql,80% 是因为 host、port、username 这三项填错了,而不是密码或权限问题。
-
host填localhost时,MySQL 默认走 socket 连接(Linux/macOS)或命名管道(Windows),但 Navicat 实际发的是 TCP 请求 —— 所以多数情况下得填127.0.0.1 -
port默认是3306,但 Docker 启动的 MySQL 容器常映射成3307或其他端口,得去docker ps -a看PORTS列 -
username要注意区分root@localhost和root@127.0.0.1—— MySQL 把它们当两个不同用户,授权可能只给了其中一个
SSL 设置不勾选反而更稳
Navicat 新建连接里有个 SSL 选项卡,默认空着就行;除非你明确配过 MySQL 的 require_secure_transport=ON 或强制要求证书,否则勾选后大概率报错 SSL connection error: protocol version mismatch。
- 本地开发环境几乎都不需要 SSL,关掉省事
- 如果服务器开启了强制 SSL(比如阿里云 RDS 默认开启),才需要导出
ca.pem,在 Navicat 的 SSL 选项卡里指定路径 - Navicat 15+ 对 TLS 1.3 支持不一致,遇到握手失败,可尝试在 MySQL 配置里加
tls_version = TLSv1.2
字符集乱码?重点调 charset 和 collation
连上后中文显示 ? 或 ,不是数据库建表没设 utf8mb4,而是 Navicat 连接层没对齐。
- 在连接设置的
Advanced页里,把Initial charset明确设为utf8mb4(不是utf8) - 如果还乱码,检查 MySQL 全局变量:
character_set_client、character_set_connection、character_set_results是否都为utf8mb4—— Navicat 不会自动同步这些值 - 某些旧版 Navicat(如 12.x)对
utf8mb4_0900_as_cs排序规则识别异常,建议统一用utf8mb4_unicode_ci
测试连接成功 ≠ 能执行所有语句
Navicat “Test Connection” 按钮只验证登录和基础通信,不校验权限细节。常见踩坑:
- 能连上但双击库名打不开表列表 → 用户缺少
SELECT权限或没授权information_schema - 执行
CREATE USER报错Access denied for user 'xxx'@'%' to database 'mysql'→ Navicat 默认连接时没指定mysql库,需手动在连接设置的Default database填mysql(仅限有权限时) - 导入 SQL 文件失败且无提示 → 检查 Navicat 的
SQL Editor设置里是否勾了Safe Updates,它会拦截没有 WHERE 的 UPDATE/DELETE
复杂点在于:MySQL 的权限模型是分层的(user@host + db.table + privilege),Navicat 不会帮你做权限推导,连得上只是起点。

















