
写这篇东西之前我先说一句实话很多人在网上搜IDEA 连接 Navicat大概率是被IDEA 的数据库面板怎么连不上明明 Navicat 能连为什么 IDEA 连不上这类问题逼来的。所以这篇我不打算绕弯子直接从连接架构讲起把 Navicat 建库、IDEA 配置、JDBC 连接串里的每个参数、以及高频翻车的排查链路全部摊开讲清楚。不管你是刚装好 IntelliJ IDEA 和 Navicat 的新手还是已经在用但被各种报错折磨过一轮的开发这篇都值得沿路走一遍。1. 先把架构理清楚IDEA 和 Navicat 不是上下级而是各连各的1.1 IDEA 连接 Navicat这个说法错在哪先纠正一个最常见也最致命的误解IDEA 并不是通过 Navicat 去连数据库的。真实链路是 IntelliJ IDEA 通过 JDBC 驱动直接连接 MySQL 服务端Navicat 同样也是数据库客户端它并不充当中间代理。打个比方Navicat 和 IDEA 更像是同一个项目的两个同事MySQL 是那个共享资料库。Navicat 负责可视化地看到库和表、手工改数据IDEA 负责写代码时顺手执行 SQL、查看表结构、做数据比对。两者并存在一台电脑上互相之间没有直接的网络连接关系。这一点搞清楚之后你就能理解为什么 Navicat 能连上、IDEA 却总是失败——因为它们俩各自独立地去连接 MySQL走的是各自的驱动、各自的连接参数。Navicat 成功不代表 IDEA 的参数是对的。1.2 一次完整连接里到底有哪几个环节一次从 IDEA 到 MySQL 的连接至少会经过五个环节IDEA 里配置的 JDBC 驱动比如 MySQL Connector/J连接地址和端口通常是localhost:3306数据库账号和密码MySQL 服务端的认证插件和授权规则防火墙、端口监听、SSL 等系统级因素任何一个环节断了IDEA 都会报错。很多人印象里配置数据库就是填个 URL、用户名、密码点 Test Connection 就好了。没错操作上确实就这几步。但一旦报错如果你心里没这张环节地图就只能瞎猜到底是密码错了还是端口被防火墙拦了还是驱动版本不兼容这张地图是排查一切连接问题的底层参照建议先记在脑子里。1.3 为什么我把 Navicat 和 IDEA 都留着而不是二选一既然两者都能连库、都能执行 SQL那是不是留一个就够了我的答案是看场景。Navicat 在看数据这件事上比 IDEA 顺手得多。表里的数据要一层层展开、筛选、编辑Navicat 的表格视图是真的为操作者设计的而在写代码的流程里IDEA 的 Database 面板能做到不离开编辑器就查看表结构、快速测试 SQL、给表生成实体类。两边各有不可替代的场景所以日常工作流里我是两个都开着的。这也引出了一个新问题两个客户端同时操作同一个库数据会不会乱其实只要遵循一个约定——结构变更尽量在 Navicat 做代码相关的 SQL 脚本在 IDEA 里写两边通过刷新保持同步——基本不会冲突。这个习惯我会在后面的章节展开讲。2. 环境准备三件套装齐之前先确认这几件事2.1 版本搭配别太随意IDE、JDK、MySQL、Navicat 各有脾性很多人以为最新的就是最好的结果装完就翻车。以 IntelliJ IDEA 2023.2 以后的版本为例IDEA 官方要求 JDK 17 起步自带的 JBRJetBrains Runtime通常也够用。你在File - Project Structure - SDKs里看到的 JDK影响的是你本地 Java 项目的编译运行而 IDEA 的 Database 工具窗口依赖的是 IDEA 自身进程里加载的 JDBC 驱动跟项目 JDK 关系不大。这条很多人搞混一报错就去换项目 JDK其实方向错了。MySQL 这边5.7 和 8.0 我都用过。如果条件允许建议直接用 8.0因为 8.0 默认的caching_sha2_password认证插件在安全性和后续兼容性上都更好只是它会在老驱动下引发一些连接问题后面专门讲。如果你用的是 MariaDBJDBC 驱动可以沿用 MySQL Connector/J基本兼容。Navicat 的版本对连接流程影响不大用 15、16、17 都可以。但要注意Navicat 是商业软件有试用期。至于网上流传的各种序列号、破解版我不推荐也不展开数据库工具是吃饭的家伙请支持正版或者选择官方明确允许的工具。2.2 装好 MySQL 之后建议先做的一次健康检查装完 MySQL 8.0 之后先别急着打开 Navicat 建库花两分钟做一次检查确认 MySQL 服务真的在监听。Windows 上可以打开服务列表查 MySQL 服务状态或者直接执行netstat -ano | findstr :3306看端口是否监听。确认 root 密码。安装时设置的 root 密码是后续所有管理操作的基础建议用一个你能记住又能写进配置文件的强度适中的密码。确认 MySQL 服务允许哪个 IP 段访问。默认情况下MySQL 监听在localhost或127.0.0.1就够本地开发用了如果你要连接远程 MySQL需要改配置文件里的bind-address。说实话大部分本地开发场景根本不需要碰bind-address默认值就是对的。但如果你遇到驱动加载成功、URL 也对、账号也对就是连接超时的情况排查范围一定要包含这一项。2.3 IDEA 这边提前确认三件事打开 IDEA 之后先确认三件事缺一个后面都会卡壳你的 IDEA 是 Ultimate 还是 Community 版。Ultimate 内置了完整的 Database 工具窗口Community 版需要到Settings - Plugins里手动安装Database Tools and SQL插件装完大概率要重启 IDE。网络能不能下载驱动。第一次连接时IDEA 会自动下载 MySQL JDBC 驱动。如果公司内网有代理需要在Settings - Appearance Behavior - System Settings - HTTP Proxy里配置代理否则会一直卡在Downloading driver。数据库面板视图有没有打开。右侧边栏或者双击Shift输入Database都能打开。讲个真实踩过的坑我第一次用社区版以为编辑器能写 SQL 就等于有数据库功能结果Database面板压根不存在折腾半天才发现要装插件。如果你看到右侧没有Database标签先去插件商店搜Database Tools and SQL。3. 在 Navicat 里把接待方准备好建库、建账号、授权3.1 先建数据库还是先建用户按这个顺序来很多教程上来就让你在 Navicat 里建一个连接、双击打开、然后新建数据库。这个流程没错但从后面 IDEA 配置的视角看我更推荐按先建库、再建账号、最后授权的顺序来每一步都带着明确目的。打开 Navicat连接到本机 MySQL 后右键连接名选择新建数据库。这里有一个容易被忽略的细节字符集和排序规则。数据库的默认字符集建议直接选utf8mb4排序规则选utf8mb4_general_ci或utf8mb4_unicode_ci都行。utf8mb4比utf8多支持 emoji 和生僻字Java 项目里几乎都要求这个所以干脆从源头上定好。数据库名采用小写加下划线例如study_db。别用大写也别带中文后面 JDBC URL 里出现编码问题会很麻烦。3.2 建一个最小权限账号给 IDEA 用一种安全习惯不要让 IDEA 用 root 去连开发库。root 的权限太大一旦代码里把密码写死泄露面也大。更合理的方式是为 IDEA 单独建一个账号只给它操作某个库的权限。在 Navicat 里用 root 连接执行下面的 SQLCREATE DATABASE study_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER study_userlocalhost IDENTIFIED BY YourStrongPassword123; GRANT ALL PRIVILEGES ON study_db.* TO study_userlocalhost; FLUSH PRIVILEGES;这里有一个必须讲清楚的点study_userlocalhost里的localhost指的是 MySQL 服务端视角下允许从哪个主机登录。如果你的 DBeaver、Navicat、IDEA 都从 127.0.0.1 连本机 MySQL那localhost通常就够用。但如果你发现 IDEA 填localhost能连、填127.0.0.1却报Access denied或者反过来那就是 MySQL 账号授权的主机字段跟实际 TCP 连接来源不匹配导致的。解决办法是额外建一个study_user127.0.0.1账号或者干脆授权study_user%。本地开发图省事用%是可以接受的生产环境千万别这么干。3.3 确认 MySQL 端口和远程连接策略连接本机 MySQL端口默认是 3306。Navicat 能连上说明 3306 端口至少对本机是可用的。但如果你是要连局域网里另一台机器上的 MySQL注意两个坑MySQL 的bind-address不能只写127.0.0.1否则远程机器永远连不进来。操作系统防火墙要放行 3306 端口。Windows 经常弹防火墙拦截提示手滑点了取消就会出现Navicat 能连自己别人连不上的怪象。我给别人排查过不少IDEA 连不上远程 MySQL的问题最终都栽在这两个系统级设置上而不是 IDEA 本身的配置上。4. 打开 IDEA 的 Database 面板把连接串填对4.1 找到 Database 窗口并新建一个数据源确认了 MySQL 端没问题之后回到 IDEA。右下角或者右侧边栏有Database标签页点击打开。如果没有用CtrlShiftAmacOS 是CmdShiftA输入Database也可以快速定位。在Database窗口的空白处点选择Data Source - MySQL。如果你是第一次用IDEA 会提示下载驱动这里走默认的MySQL Connector/J即可。注意IDEA 拉取驱动是从 JetBrains 仓库下载的网络受限时这里会卡住上面提过代理配置自己核对一下。4.2 连接参数逐个说明URL、用户名、密码、时区、SSL新建数据源的窗口里有一堆输入框。这里按优先级逐个说Host就是数据库地址。本地填localhost或127.0.0.1。Port3306除非你改过 MySQL 端口。User填刚才建好的study_user不是 root。Password填study_user的密码。Database填study_db填了它之后连接进来就能直接看到这个库不用再手动展开。URL 那一栏IDEA 会根据你填的信息自动生成 JDBC URL。但默认生成的 URL 往往太干净我的建议是自己手动把参数补全。一个我比较常用的最小完整 URL 是这样的jdbc:mysql://localhost:3306/study_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue下面逐个解释这些参数不是为了炫技而是因为它们每一个都对应一类真实报错useUnicodetruecharacterEncodingutf8保证中文字符在读写时不会被转乱码。MySQL 8 默认字符集已经是 utf8mb4但你显式指定一下更稳。useSSLfalse本地开发把 SSL 关掉避免握手时因为证书问题报错。生产环境必须评估是否要开。serverTimezoneAsia/Shanghai数据库驱动和 MySQL 服务端时区不一致时驱动会报The server time zone value ...错误。中国开发者这里填Asia/Shanghai最常见一劳永逸。allowPublicKeyRetrievaltrue这一条专门用来解决 MySQL 8.0 认证插件引起的Public Key Retrieval is not allowed错误。原因后面细说这里先知道它对应哪个坑。4.3 点 Test Connection 前后的预期与准备填写完参数点Test Connection。正常情况下应该弹出Connection successful。我习惯在点测试前先确认 Navicat 连接还开着能正常查询数据。这样做的意义是如果 Navicat 也连不上那问题出在 MySQL 服务端别在 IDEA 里浪费时间如果 Navicat 能连而 IDEA 失败那问题出在驱动的连接参数接下来重点看报错信息。如果你第一次点就报错别慌。下一篇我会专门列一个高频报错的排查链路但你得先学会看报错窗口里那几行字。IDEA 的报错窗口会把核心失败原因放在错误信息的最前面有时候一整段话里只有一句是关键你需要把它截下来或者复制出来。5. 从能连上升级到好用的数据库开发环境5.1 先用 Console 验证真实连接连接成功后Database窗口里会出现你的数据源展开就能看到study_db数据库下的表。右键数据源选择Open Console会打开一个 SQL 控制台。在这里输入SELECT NOW(), DATABASE();能返回当前时间和库名就说明 IDEA 和 MySQL 的数据链路完全打通了。顺带说一下 Schema 的选择逻辑同一个 MySQL 实例下可能有很多个库IDEA 默认会读取 MySQL 的元数据把库都列出来。在 Console 里执行多表联合查询时建议在 SQL 里带库名前缀例如SELECT * FROM study_db.users;避免因为当前上下文切到别的库而查不到表。5.2 用 IDEA 写 SQL比 Navicat 好在哪既然已经接入了 IDEA我想多聊一点为什么代码写完还要顺手在 IDEA 里写 SQL因为 IDEA 的 SQL 编辑器与代码工程是打通的。你写 Java 代码时定义一个实体类旁边开一个 SQL 控制台表字段、类型、注释都在同一个 IDE 窗口里上下文切换成本极低。Navicat 虽然也能写 SQL但它在代码场景里属于另一个应用来回切换容易打断思路。IDEA 提供的自动补全也很香。输入SELECT之后表名、字段名的提示会跟着弹出来不用专门记字段拼写。它的格式化功能可以用CtrlAltL一键整理 SQL 缩进写复杂查询时能省不少事。这里有个小技巧在编写插入或更新语句前先用 IDEA 的表格查看器双击表名Open in Table View肉眼确认一遍字段和已有数据再动手写 SQL。这样能避开把非空字段漏了把类型写错这类低级问题。5.3 两个客户端同时操作一个库时的同步约定我前面提过Navicat 和 IDEA 同时开着是常态。但两边同时改表结构、同时改数据是可能互相覆盖的。我的工作习惯是结构变更建表、加字段、加索引统一在 Navicat 里做。理由是 Navicat 的图形化建表界面更直观改完能看到完整的 DDL。代码仓库里的 SQL 迁移脚本单独维护用来在别的机器上还原结构。表数据查看和轻量查询在 IDEA 里做。因为这在你写代码的流程内不打断手头逻辑。当你在 Navicat 里新增了一张表或改了一个字段IDEA 这边不会自动感知。需要右键数据源或数据库选择Refresh重新读取元数据。很多人问IDEA 里看不到刚建的表十有八九就是没刷新。6. 连接失败高频原因一条能照着走的完整排查链路连接问题不会因为配置对了就永远不发生。所以这章我用真实遇到过的报错作为线索串出一条排查链路拿到一个报错先看什么、再查什么、最后改什么。6.1 报错文本怎么读抓第一个cause别被长长一段唬住IDEA 连接报错的弹窗有时会带出一大段堆栈信息看着吓人其实核心原因通常就在前几行。比如[08001] Could not create connection to database server.这种是连接层失败优先怀疑网络、端口、驱动[28000] Access denied for user ...是认证失败优先检查用户名密码和授权Unable to load authentication plugin caching_sha2_password是驱动版本太老根本原因不一定是密码。我的排查顺序是先看错误最开头的错误代码方括号再定位第一条Caused by:然后决定去查哪一层。这套方法在 IDEA、Navicat、命令行各种场景下都通用。6.2 Public Key Retrieval is not allowedMySQL 8.0 最经典的报错这个错误几乎每个用 MySQL 8.0 的人都遇到过。它的根源是MySQL 8.0 默认认证插件是caching_sha2_password。当账号首次连接时服务端需要向客户端发送 RSA 公钥用于传输加密后的密码如果 URL 里没配置客户端直接拒绝继续握手报出Public Key Retrieval is not allowed。解决办法有两种在 JDBC URL 末尾加上allowPublicKeyRetrievaltrue让客户端允许获取服务端公钥。本地开发最常用。修改 MySQL 账号的认证插件为 mysql_native_passwordALTER USER study_userlocalhost IDENTIFIED WITH mysql_native_password BY YourStrongPassword123;。但 MySQL 官方已经不太推荐这种方式新项目没必要为了兼容老驱动而降低密码存储的安全性。我的建议是新项目一律用方案 1同时把驱动升级到支持 MySQL 8.0 的版本。免得为了图省事改了插件后面又踩别的兼容性问题。6.3 端口连不上、连接超时、Access denied 的排除顺序拿到Cannot connect或者Connection timed out按照这个顺序逐步排除先本机测试mysql -h127.0.0.1 -P3306 -ustudy_user -p用命令行连一次前提是你装了 MySQL 客户端命令。命令行能连说明账号和授权没问题问题在 IDEA 或驱动。在 Navicat 里新建一个相同参数的连接测试。能连说明 MySQL 监听和防火墙没问题重点返回去看 IDEA 的 URL 与账号信息。检查 JDBC 驱动版本。驱动太老可能导致不兼容 MySQL 8.0 的认证方式或字符集。检查防火墙和远程绑定。如果目标是远程数据库确认bind-address不是127.0.0.1并确认 3306 端口在防火墙上开放。Access denied for user xxxhost则要稍微分情况如果是密码错误通常直接提示using password: YES如果是授权主机不匹配提示里的 host 会暴露你实际从哪个来源登录。解决办法前面说过按实际来源调整账号授权即可。6.4 驱动下载阻塞导致的伪连接失败还有一种情况IDEA 连数据库弹窗根本没走到真正的连接环节而是卡在Downloading driver files。这属于驱动拉取失败不是数据库连接失败。国内网络环境下偶尔会遇到。排查方法是到Settings - Database - Data Source里找到当前数据源的驱动看是不是处于缺少文件的状态。手动点下载一次如果一直失败检查 IDE 的 HTTP 代理配置。企业内网通常都需要代理。这里有一个容易被忽略的坑如果你手动选了一个本地下载好的驱动 jar 包但版本和数据库不匹配连接测试会报一些很隐晦的驱动内部错误。我的习惯是优先信任 IDEA 自动下载的默认驱动版本除非项目有明确要求。6.5 关于 MySQL 服务重启后IDEA 又连不上的常态问题最后要提一个不常被注意的场景电脑重启、MySQL 服务没自动启动时IDEA 里的连接测试会直接失败而你第一反应往往是IDEA 配置坏了。遇到这种昨天还好好的今天突然连不上的情况先别改任何配置。先去服务管理器里确认 MySQL 服务是否在运行再用命令行连一次。很多时候问题根本不是配置而是服务没被拉起。我个人的习惯是重启电脑后先手动确认 MySQL 服务状态再打开 Navicat 验证一次最后才用 IDEA 连接。这套流程看起来繁琐但可以避免大量假性配置问题的时间浪费。最后说一点我自己的使用习惯走到这里IDEA 和 Navicat 之间已经没有什么神秘感了一个负责代码里丝滑的数据库交互一个负责可视化的数据管理两者各自直连 MySQL互相当对方不存在。我日常工作流里db结构变更用 Navicat 的图形界面对照着改日常增删查改用 IDEA 的 Console 和代码上下文无缝切换两边定期刷新元数据保持同步。这套组合我用了很久稳定、顺手、能少走很多弯路。希望这篇也能让正在被连接问题折磨的你少折腾一晚上。