Navicat 16 连接 OceanBase 必须严格按租户兼容模式(MySQL 或 Oracle)选择对应连接类型、驱动及初始化命令;选错则“测试连接”成功却无库列表、SQL 报错或乱码。

Navicat 16 能连 OceanBase,但必须按租户模式选对连接类型、驱动和初始化逻辑,否则“测试连接”成功却看不到库、执行 SQL 报错或字段乱码是常态。
选错连接类型:MySQL 模式 vs Oracle 模式
OceanBase 租户有 MySQL 和 Oracle 两种兼容模式,Navicat 必须严格匹配——不能靠端口或用户名猜测。云控制台或部署文档里写的「兼容模式」才是唯一依据。
- MySQL 模式:Navicat 新建连接时选
MySQL类型,用户名格式为user@tenant(直连)或user@tenant#cluster(经 ODP),端口通常是2881(直连)或2883(ODP) - Oracle 模式:必须选
Oracle类型,用户名只填user(不带 @ 或 #),密码单独填,OCI 库路径要指向本地 Oracle 客户端的oci.dll或libclntsh.dylib - 混用必失败:比如 Oracle 模式下硬选 MySQL 连接类型,即使端口填
2883、用户名带@tenant,也会在元数据查询阶段卡住,报Unknown database 'information_schema'或直接空白
驱动与 JDBC URL 配置(MySQL 模式专用)
Navicat 16.1+ 自带 OceanBase JDBC 驱动,但默认不启用;手动指定才能绕过 MySQL 协议兼容性缺陷。
- 进「驱动程序」页签 → 勾选
使用自定义 JDBC 驱动→ 点击添加,选择下载好的oceanbase-client-*.jar -
类名必须填:com.alipay.oceanbase.jdbc.Driver -
URL 模板必须填:jdbc:oceanbase://{host}:{port}/{database}(不能用 mysql:// 开头) - 若用 Navicat 自带的 MySQL 驱动(
com.mysql.cj.jdbc.Driver),需额外在「高级」→「初始化命令」中加:SET SESSION ob_mysql_compatibility_mode = ON;,否则information_schema不可见
字符集、时区与数据库列表加载失败
表显示为空、中文变问号、时间差 8 小时,90% 是字符集或时区没锁死,Navicat 的自动协商在这里不可信。
- 「连接」页签 → 「字符集」下拉框必须手动选
utf8mb4(不能留空、不能选 auto) - 「高级」页签 → 「初始化命令」里粘贴两行:
SET NAMES utf8mb4;和SET time_zone = '+00:00'; - Navicat 默认会尝试自动获取所有数据库列表,但 OceanBase MySQL 租户默认不暴露
information_schema,导致左侧树形面板为空——关掉「Retrieve all databases」选项,然后手动在「数据库」字段填你实际要连的库名(如test),大小写敏感
网络与权限校验要点
Connection refused 或 Access denied 往往不是账号密码问题,而是底层连不上或权限不足。
- 确认 OBServer 监听的是 IPv4 地址:运行
netstat -tuln | grep 2881,输出中必须含0.0.0.0:2881或具体 IP,不含::1:2881(IPv6) - 本地防火墙要放行出站,服务器防火墙(如 iptables)需开放对应端口,云厂商还要在安全组加白名单——填你本地电脑的真实公网 IP,不是内网地址
- 用户至少要有
SELECT权限才能展开库表;建表/改表需CREATE和ALTER;Oracle 模式下操作表必须带 schema 前缀(如SELECT * FROM admin.t1),Navicat 右键建表时「Owner」字段不能空
最易被忽略的是:OceanBase 的 MySQL 租户默认关闭 ob_mysql_compatibility_mode,而 Navicat 启动时强制查 information_schema ——这个开关不在客户端能控制,必须通过初始化命令或服务端 ALTER SYSTEM 打开,否则图形界面就卡在“加载中”。











