主机、端口、数据库名是连接成立的前置条件:主机须与MySQL实际监听地址一致(如Docker内网IP而非localhost),端口需匹配容器映射值(如3310),数据库名填错会导致不可见表或直接拒绝连接,建议开发环境留空、连后再选。

填错主机、端口或数据库名,不是连不上,就是连上却看不见表——这三个参数不是可选项,而是连接成立的前置条件。
主机和端口:先确认数据库服务真正在哪听
主机不是“随便写 localhost 就行”,它必须和数据库实际监听地址一致。比如 MySQL 在 Docker 里跑,默认只监听 172.17.0.2(容器内网 IP),填 localhost 就会走本机回环,根本碰不到容器里的服务。
-
localhost和127.0.0.1表面一样,但 MySQL 认证插件可能对二者处理不同(尤其 8.0+ 默认caching_sha2_password);实测更稳的是用127.0.0.1 - 端口不能只记“默认值”:PostgreSQL 容器常用
5433避开宿主冲突;达梦是5236;SQL Server 是1433;填错端口的报错通常是Connection refused,不是认证失败 - 远程库必须提前验证网络可达:
telnet host_ip port或nc -zv host_ip port,连不通就别填密码了
数据库名:留空有时比乱填更安全
这个字段在连接建立阶段并非必需,MySQL、PostgreSQL、达梦都支持先连上服务器再选库。但填错会导致两种后果:一是连上后导航树里看不到任何表(因为 DBeaver 默认只展开你指定的库);二是某些云数据库(如阿里云 RDS)强制要求连接串里带库名,否则直接拒绝。
- 本地开发环境建议留空,连上后再从左侧导航树双击目标库——这样能一眼看到所有可用库,避免拼错名
- 如果明确只用一个库,且服务端没限制,填上能省去后续切换步骤;但注意大小写:Linux 下 MySQL 库名区分大小写,
mydb和MyDB是两个库 - PostgreSQL 的
database参数实际对应的是“初始连接的默认库”,不是 schema;要查其他 schema 的表,得靠 SQL 里显式写schema_name.table_name
用户名/密码之后容易被忽略的驱动层参数
很多连不上问题,表面是账号错,其实是 JDBC 驱动没过认证关。DBeaver 的“驱动属性”页不是摆设,几个关键项不调,Public Key Retrieval is not allowed 或 Server returns invalid timezone 这类错就会卡死。
- MySQL 8.0+ 必加:
allowPublicKeyRetrieval=true,否则握手阶段直接中断 - 时区统一靠:
serverTimezone=Asia/Shanghai(不能写GMT+8,JDBC 不认) - 字符集显式声明比依赖服务端配置更稳:
characterEncoding=utf8mb4,尤其涉及 emoji 或四字节中文时 - SSL 默认开启可能引发
SSL handshake failed,测试环境可临时设useSSL=false,但生产必须配证书
真正麻烦的从来不是“怎么填”,而是填之前没想清楚:数据库在哪跑、谁在管权限、网络路径是否通、驱动版本和数据库大版本是否匹配。这些信息不在 DBeaver 界面里,但在你执行 mysql -h -P -u -p 或 psql -h -p -U -d 能连上的那一刻,就已经决定了 DBeaver 里哪些参数必须严丝合缝。

















