简介:Navicat Premium v12.1.17(x64) 绿色中文注册版面向需要统一管理 MySQL、Oracle 等数据库的开发者与运维人员,提供免安装、解压即用的数据管理环境,适合日常查询、表结构维护、SQL 编辑及多库连接调试等场景。压缩包共 118 个文件,约 92.21MB,主体由 101 个 dll 依赖库、3 个 exe 可执行程序,以及 msi 安装包、php 脚本、说明文档和备份文件组成,覆盖主程序运行、数据库驱动、注册补丁与附带说明等部分,目录组织较完整,便于按用途检索。已有 1414 人学习或下载,说明该版本在中文用户中仍有一定参考价值。包内同时提供注册工具、补丁文件与激活问题提示,可帮助读者理解绿色版部署时的依赖关系、激活失败排查方向及版本匹配注意事项;对需要留存旧版 Navicat、核对客户端组件构成或研究数据库连接库搭配的使用者较为实用。
1. Navicat Premium v12.1.17 x64:解压就能跑,却总在连接上翻车
上周,我给一台内网 Windows Server 2012 R2 配数据库维护环境。这台机器不允许随意安装软件,只能拷贝文件;桌面上的 Navicat Premium v12.1.17 x64 绿色包解压后双击就能启动。MySQL 那边五分钟就连上了,Oracle 这边却一直弹Cannot load OCI DLL。同一个工具、同一个压缩包,在两个数据库上出现了完全不同的结果。这是 12.1.17 这个版本最常见的情况:程序启动本身不难,问题几乎都出在后面的 OCI 库、位数、字符集这几层。
Navicat MySQL Oracle 三线并存的项目里,12.1.17 x64 依然是很多老系统的默认选择。它启动快、老 Oracle 版本支持好、安装包不依赖安装器。但装不好会怎样?最常见的是折腾一整天,最后怀疑压缩包损坏。这篇记录写给两类人:需要在内网机器上快速搭起 Navicat 的运维,以及要同时连接 MySQL 和 Oracle、却卡在驱动配置上的开发者。
2. 环境清点:v12.1.17 x64 该放在哪台机器、哪个目录
先把环境确认清楚,再动手解压。12.1.17 是 2017 年前后的版本,它对操作系统的要求不高,但对位数、运行库和存放路径比较敏感。很多「双击没反应」「启动闪退」「Oracle 连不上」的问题,其实在解压那一刻就已经决定了。
2.1 系统位数、运行库与 .NET 前置
系统侧有三件事要确认:操作系统位数、VC++ 运行库、以及目标机器的可用内存。12.x 系列依赖微软 VC++ 2013 x64 运行库,这是常见做法,缺了它典型表现是启动时提示缺少msvcr120.dll或直接静默退出。
先确认系统本身:
# 确认操作系统架构与版本,Server 2008 R2 及以上基本都能跑 Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, OSArchitectureOSArchitecture返回 64-bit 才能跑 x64 版。这个字段在 32 位系统上会返回 32-bit,不要凭 CPU 型号猜。Version顺手看一眼,Server 2008 R2 对应 6.1,Server 2012 R2 对应 6.3,装不上时先排除系统版本这个因素。
接着确认运行库。VC++ 2013 的注册表项在 64 位系统上会分两处写入,Uninstall 键下只列出一部分,所以要把 32 位视图也扫一遍:
# 分别扫 64 位与 32 位注册表视图,避免漏掉已安装的运行库 $paths = @( 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' ) Get-ItemProperty $paths -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like '*Visual C++ 2013*' } | Select-Object DisplayName, DisplayVersion结果里应该同时看到Microsoft Visual C++ 2013 Redistributable (x64)。只装了 x86 版本是不够的,因为 Navicat 主程序是 64 位,加载的是 64 位 CRT。如果这一条查出来是空的,先去装运行库再谈别的,否则后面所有报错都可能由它引起。
提示:装完运行库必须重启一次。VC++ 运行库的 DLL 在进程启动时被加载,不重启的话,正在运行的 explorer 或终端继承的是旧环境,容易出现「明明装完还是报错」的误会。
内存方面,12.1.17 的常驻占用在两三百兆,但打开大结果集或做数据同步时会翻几倍。我一般要求目标机器至少有 4 GB 可用内存,低于这个数,执行一条带ORDER BY的大查询就会去做磁盘交换,看起来像卡死,实际只是内存不够。
2.2 从 12.1.17 与 15、16 的取舍看版本选择
很多人上来就问要不要直接用最新版。我的判断标准是看要连什么数据库、跑在什么系统上。12.1.17 和后来的 15、16 差异不小,下面这张表是我自己在几个项目间反复对比后整理的,只列实际影响安装和连接的部分:
| 对比项 | 12.1.17 x64 | 15 / 16 系列 |
|---|---|---|
| 启动内存占用 | 较低,机械硬盘机器也能快速启动 | 明显更高,首次启动慢 |
| 绿色包形态 | 解压即用,无需安装器 | 多数版本需要安装器写注册表 |
| Oracle 9i / 10g 连接 | 兼容性好,老项目常用 | 部分版本对新驱动依赖更强 |
| Oracle Instant Client 兼容范围 | 11.2 / 12.1 / 12.2 均可 | 对 18c、19c 支持更完整 |
| 界面 | 经典布局,老用户习惯 | 有深色模式、界面重排 |
| 配置文件存储 | %APPDATA%\PremiumSoft\Navicat Premium | 路径相同,结构略有调整 |
结论是:目标机器是老 Windows Server、要连 Oracle 10g 或 11g、只想解压就能用,选 12.1.17 更稳;如果机器是新系统、数据库是 19c 以上、需要 JSON 字段的可视化编辑,那 15 或 16 更合适。版本选错带来的麻烦比配置错误大得多,我见过有人在 Server 2008 R2 上装新版,卡在 .NET 版本上耗掉半天。
这里还有一条血泪经验:不要在同一台机器上同时放置多个不同大版本的 Navicat,并且共用一个配置目录。12.x 和 16.x 的配置目录名相同,只是内部结构有差异,混用会导致配置写入异常,表现是重启之后连接列表少了几条。如果确实需要并存,就给每个版本设置独立的配置目录,这一点在 3.2 节会给出具体做法。
至于授权问题,这不在安装记录的讨论范围内。我只提醒一句:那些替换文件的做法我见过太多次,后来查问题时根本分不清是软件本身出错,还是文件被改坏了。正规渠道的授权在排错时至少能让你少一层怀疑。
2.3 解压路径:三个不能选的位置
绿色包解压到哪儿,直接影响后面能不能正常写入配置、能不能加载 OCI 库。以下三类位置我明确不推荐:
第一是C:\Program Files和C:\Program Files (x86)。这两个目录受 UAC 保护,登录用户没有写权限,而 12.1.17 在运行时会尝试往程序目录写临时文件和日志。结果就是启动正常、一操作就报错,或者设置改完不生效。UAC 的目录虚拟化偶尔会帮忙把写操作重定向到用户目录,但只对部分 API 生效,属于不可预期的行为。
第二是包含中文、空格或特殊符号的路径。Navicat 自身对中文路径的容忍度尚可,但 OCI 加载和部分导出流程走的是外部组件,路径里的非 ASCII 字符会出问题。我习惯统一用D:\Tools\Navicat_Premium_12.1.17这种纯英文、无空格的形式。
第三是 OneDrive、坚果云这类同步目录。同步客户端会在后台持续读取目录内的文件,Navicat 运行时也需要独占写入配置临时文件,两者容易发生冲突,典型表现是配置偶尔丢失、启动提示文件被占用。
确定位置后,建目录并解压:
# 建一个纯英文、无空格的工具目录,避免路径解析问题 mkdir -p /d/Tools/Navicat_Premium_12.1.17 # 解压绿色包(在 Git Bash 或 WSL 下执行;纯 Windows 环境直接用解压软件) unzip -o ./Navicat_Premium_12.1.17_x64.zip -d /d/Tools/Navicat_Premium_12.1.17 ls -la /d/Tools/Navicat_Premium_12.1.17-o表示覆盖已有文件,重复解压时不会中断;-d指定目标目录。解压完执行ls是为了确认主程序确实落在根目录,而不是多套了一层同名文件夹。如果压缩包里带一层Navicat Premium子目录,要么把它里面的内容平移到根目录,要么把整个路径改掉,否则后面配置 OCI 路径时容易指错。
3. 部署落地:解压式安装与首次启动的四步
绿色包的部署没有安装向导,但也不是「解压完就完事」。有几项初始化工作必须在第一次连数据库之前做完,否则后面每连一个库都要重新遇到这些问题。
3.1 目录结构核对:哪些文件不能少
解压完成后先做一次结构核对。12.1.17 x64 的绿色包目录大致如下,重点是几个与运行和连接相关的文件:
| 文件 / 目录 | 作用 | 缺失后的表现 |
|---|---|---|
navicat.exe | 主程序入口 | 双击无反应 |
navicat.ini | 部分运行参数 | 语言、窗口状态异常 |
*.dll(同目录多个) | 界面与数据库驱动组件 | 启动报找不到模块 |
res/resources目录 | 图标、语言包 | 界面出现空白或方块 |
navicat.chm或帮助文件 | 内置文档 | 无影响,可缺 |
核对方式是比对文件总数与主程序能否独立启动。主程序放在根目录,同目录下会有若干 DLL,这些是运行必需的,不要为了减小体积随意删除「看起来没用」的 DLL。
# 统计根目录文件与 DLL 数量,与压缩包说明对照 $root = 'D:\Tools\Navicat_Premium_12.1.17' Get-ChildItem $root -File | Measure-Object | Select-Object Count Get-ChildItem $root -Filter *.dll | Select-Object Name, Length如果 DLL 数量和来源压缩包对不上,说明解压过程被安全软件拦截了部分文件。这种情况在企业内网很常见,因为终端防护会把某些驱动类 DLL 判为可疑并直接隔离。处理办法是先看防护软件的隔离区记录,确认是误报后再重新解压,不要靠反复重试来碰运气。
3.2 首次启动与配置目录的独立化
第一次启动前,先确认配置目录的落点。12.x 默认把连接配置、查询历史、界面设置都放在:
%APPDATA%\PremiumSoft\Navicat Premium\其中profiles子目录存连接信息,*.log存运行日志。多版本并存时,这是产生配置写入异常的主要来源。让某个版本使用独立目录的常见做法是启动时指定配置路径,或者在启动前用环境变量把 APPDATA 指向别处——后者副作用太大,会影响同进程的其他程序,我一般不这么干。
更稳妥的做法是给并存的版本各准备一个启动脚本,在脚本里临时切换工作目录和 APPDATA:
#!/usr/bin/env bash # 给 12.1.17 单独准备配置目录,避免与新版 Navicat 冲突 export NAVICAT_HOME="/d/Tools/Navicat_Premium_12.1.17" export APPDATA="/d/Tools/Navicat_Config_12117" # 仅当前 shell 生效 mkdir -p "$APPDATA/PremiumSoft/Navicat Premium" cd "$NAVICAT_HOME" ./navicat.exe &这里的关键点是APPDATA的改动范围被限制在这个脚本启动的进程及其子进程里,关掉窗口就恢复原状。mkdir -p先建好目录,因为部分版本在目录不存在时不会自动递归创建,而是直接回退到默认路径,结果就是你以为隔离了,其实还写在一起。
如果不想用脚本,也可以接受默认路径,前提是机器上只装一个 Navicat 大版本。判断方法很简单:看%APPDATA%\PremiumSoft\下面有几个子目录,如果存在Navicat Premium之外的同类目录,说明历史上装过别的版本,动手前先备份再清理。
注意:清理配置目录等于清空所有保存的连接和查询历史。动手之前先把整个
PremiumSoft目录复制一份到别处,这是唯一有效的备份方式,比事后想恢复强得多。
3.3 界面语言与基础偏好设置
首次启动后,先花两分钟把语言和几个基础选项定下来,避免边用边改。中文界面在 12.1.17 里通过「工具 → 选项 → 常规 → 界面语言」切换,选中文后需要重启程序才生效。如果选项里没有中文,说明语言包文件缺失,回到 3.1 节核对res目录。
基础偏好里我通常会调整三项。第一是「记录查询历史」的条数,默认值偏小,排查问题时经常需要回溯几天前的 SQL,改成 500 条更实用。第二是「编辑器字体」,默认字体在高分屏上偏小,换成等宽字体并调大字号,写复杂 SQL 时眼睛舒服很多。第三是「自动检查更新」,内网机器根本连不出去,关掉能省掉每次启动时的等待。
4. 连接配置:MySQL 与 Oracle 两条线分别怎么填
程序跑起来只是第一步,真正耗时间的是连接配置。MySQL 和 Oracle 走的是两套完全不同的客户端库,参数取舍也不一样,必须分开说。
4.1 MySQL 连接:主机、端口与字符集
新建 MySQL 连接,需要填的其实就五项:连接名、主机、端口、用户名、密码。连接名只影响本地显示,随便写;主机填 IP 或域名,内网环境建议直接写 IP,避免 DNS 解析拖慢连接速度;端口默认 3306,遇到非默认端口的情况在运维环境里很常见,改端口前先用命令行确认目标端口通不通。
# 先用自带客户端验证账号和端口,排除网络与权限问题 mysql -h 10.0.0.21 -P 3307 -u app_ro -p \ --default-character-set=utf8mb4 \ -e "SELECT @@character_set_server, @@collation_server, NOW();"--default-character-set=utf8mb4是必须显式指定的,很多发行版客户端默认还是 latin1 或 utf8,连上去看到的全是问号。SELECT @@character_set_server查的是服务端字符集,输出utf8mb4说明服务端本身没问题,问题在客户端侧。最后那个NOW()用来对比时间,如果和本机差 8 小时,后面查数据会出现「时间对不上」的情况,配置项在 4.3 节说。
命令行通了,Navicat 里就照抄这五项。唯一需要额外注意的是「编码」下拉框,选Auto有时会猜错,直接锁死utf8mb4更保险。这一步做完点「测试连接」,看到成功提示再保存。
4.2 Oracle 连接:oci.dll 的位数与路径对齐
Oracle 这条线是 12.1.17 最容易出问题的地方。Navicat 连 Oracle 需要外部客户端库oci.dll,这个文件不在绿色包里,得额外准备 Instant Client。
第一件事是确认位数对上。x64 的 Navicat 必须配 64 位的 Instant Client,混用会直接报错。先用 PE 头确认主程序位数:
# 读 PE 头的 Machine 字段:8664 表示 x64,014C 表示 x86 $p = 'D:\Tools\Navicat_Premium_12.1.17\navicat.exe' $fs = [System.IO.File]::OpenRead($p) $br = New-Object System.IO.BinaryReader($fs) $fs.Seek(0x3C, 'Begin') | Out-Null $peOff = $br.ReadInt32() $fs.Seek($peOff + 4, 'Begin') | Out-Null $machine = $br.ReadUInt16() $br.Close(); $fs.Close() 'Machine = 0x{0:X4}' -f $machine偏移0x3C处存的是 PE 头起始位置,跳过PE\0\0四个字节后读两个字节就是 Machine 字段。0x8664对应 x64,0x014C对应 x86。这个检查看起来绕,但比装完报「不是有效的 Win32 应用程序」再回头找原因要快得多。
确认位数后,把 Instant Client 解压到一个纯英文、无空格的目录,然后在 Navicat 里指定路径:
- 工具 → 选项 → 其他 → OCI library(12.1.17 在这个位置)
- 填入完整路径,例如
D:\oracle\instantclient_12_1\oci.dll - 保存后重启 Navicat
我一般用 Instant Client 12.1 或 12.2 配 12.1.17,兼容性最稳。用 18c 以上版本偶尔会在连接建立阶段崩溃,表现是进程直接消失,没有任何错误提示,属于最难查的那种问题。如果目标库是 Oracle 10g 或 11g,Instant Client 11.2 也能用,但要确认是 64 位版本。
注意:不要图省事把
oci.dll复制到 Navicat 根目录。看起来能跑,但后续升级 Instant Client 时容易忘记清掉旧文件,结果加载的还是旧版本,排错时非常容易误判。
填完路径重启,连接测试通过。如果仍然报Cannot load OCI DLL 193,193 是 Windows 的错误码,意思是位数不匹配,回头重新核对 4.2 节第一步。
4.3 编码、时区与连接属性
连接建立之后,还有几个参数影响数据展示的准确性。
编码方面,MySQL 侧在连接属性里锁utf8mb4;Oracle 侧由服务端NLS_CHARACTERSET决定,客户端不需要额外设置,但要确认 Instant Client 目录下没有残留的NLS_LANG环境变量覆盖。有覆盖时查询中文会显示成方框或乱码,且只在部分表上出现,很容易被当成数据本身的问题。
时区方面,MySQL 连接的「高级」页里有个选项控制时间解释方式。如果应用写库时用的是本地时间、读出来却差 8 小时,先检查这一项,而不是怀疑数据写入错误。Oracle 侧的时间偏移多数来自会话时区,可以在连接后的 SQL 窗口里查一次:
-- 确认会话时区与服务端字符集,两者都会影响查询结果的呈现 SELECT SESSIONTIMEZONE FROM DUAL; SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_DATE_FORMAT');NLS_DATE_FORMAT决定日期在结果集里怎么显示,服务端是DD-MON-RR时在中文界面下会出现英文月份缩写,看着别扭但数据没错。这一点不要跟编码问题搞混。
5. 避坑与排查:五条踩过的记录
下面五条都是我在不同机器上真实遇到过的,按「现象 → 原因 → 解决」记下来,遇到同类问题时可以对着排。
第一条:双击主程序完全没反应,任务管理器里也看不到进程。
现象是双击后光标转一圈就没动静,没有任何报错窗口。原因大概率是 VC++ 2013 x64 运行库缺失,进程在加载阶段就退出了,来不及弹窗。解决是按 2.1 节的脚本确认运行库,缺了就装上并重启;如果运行库齐全,再检查是不是被终端防护软件拦截,去隔离区看一眼。
第二条:启动报 0xc000007b。
现象是弹出错误框,提示应用程序无法正常启动,错误码0xc000007b。原因是位数混用,常见于从别人机器上拷了一个 32 位的oci.dll或某个运行库 DLL 混进目录。解决是用 4.2 节的 PE 头脚本核对主程序位数,再把程序目录里所有 DLL 的位数统一。这个错误码跟 Navicat 本身关系不大,是 Windows 加载器报的,所以别去翻 Navicat 的日志。
第三条:Oracle 连接报 Cannot load OCI DLL,但路径明明填对了。
现象是路径填的是完整路径、文件也确实存在,连接仍然失败。原因有两个:一是 Instant Client 目录里缺依赖,oci.dll本身还依赖同目录下的其他几个 DLL,单独拷一个文件过去没用;二是系统 PATH 里存在另一个更早版本的 Oracle 客户端,加载器优先命中了它。解决办法是确认整个 Instant Client 目录完整解压,并把它从 PATH 里摘出去,只让 Navicat 通过选项里的路径加载。
第四条:查询结果里的中文全是问号,但同一张表用命令行查正常。
现象是 Navicat 里显示问号,命令行客户端显示正常。原因在客户端字符集,多数情况是连接属性里的编码被设成了Auto或被误改成latin1。解决办法是打开连接属性把编码锁成utf8mb4,断开重连。如果改完还是问号,去查服务端的character_set_server,确认库本身的存储编码没问题。这一条特别容易被误判成「数据存坏了」,实际数据一直是好的,只是展示层的问题。
第五条:配置改完之后重启,连接列表少了几条。
现象是新建的连接、改过的设置,重启后部分丢失。原因是程序目录或配置目录所在位置有同步客户端在跑,或者存在多个大版本共用同一个配置目录。解决办法是先把%APPDATA%\PremiumSoft\整个备份一份,然后把 Navicat 挪到不同步的本地磁盘,多版本并存的情况按 3.2 节的脚本做隔离。这条属于最不该发生但最容易忽略的一类,因为丢失是间歇性的,第一次遇到往往以为是自己没保存。
6. 装完怎么验收:三条检查和一个我坚持的习惯
装完不等于能用,我一般会跑三条检查再交付。
第一条,连接层验收。MySQL 和 Oracle 各建一个连接,点「测试连接」,两个都要绿。这一步只是证明握手成功,不代表能查数据,所以接着做第二条。
第二条,数据层验收。在两个连接上各执行一条带中文和多列的结果查询,用下面的语句跑一遍:
-- MySQL:验证中文、时间、排序三项都不出错 SELECT id, name, created_at FROM demo_table WHERE name LIKE '%测试%' ORDER BY created_at DESC LIMIT 20;重点看三处:中文显示是否正常、时间是否与业务预期一致、排序结果是否稳定。三处都正常,说明字符集、时区、连接属性这三层配置没有互相影响。Oracle 侧换成带NLS相关列的表做同样检查。
第三条,导出层验收。选一张表导出为 CSV,用文本编辑器打开看编码和换行。这一步能暴露前面所有连接测试都发现不了的问题——结果集展示用的是驱动的内存表示,导出走的是另一条路径,字符集处理未必一致。
| 验收项 | 检查方法 | 期望结果 |
|---|---|---|
| 连接握手 | 连接属性里点「测试连接」 | 提示连接成功 |
| 中文与时间 | 执行带中文字面量的查询 | 中文正常、时间无偏移 |
| 导出编码 | 导出 CSV 后用编辑器打开 | 无乱码、换行正确 |
| OCI 加载 | 重启程序后重连 Oracle | 不报 DLL 相关错误 |
最后一条尤其重要:重启之后再验一遍 OCI。很多 OCI 相关的问题只在进程重新加载时才暴露,第一次连接是缓存命中的结果,重启之后就报错了。
从那以后我每次配 Navicat,不管多急,都强制走一遍「重启后重连」这一步,宁可多花两分钟,也不想在演示前十分钟接到电话说连不上库。把这套环境固化成脚本和检查清单之后,我在三台机器上复现过同样的结果,后面再换机器就是照着走的流程。希望帮到你。
本文还有配套的精品资源,点击获取