结论先行:信创适配(信息技术应用创新适配)的验收标准只有一条——原有业务流程在国产软硬件栈上跑出与原来一致的结果。装得上、能启动、能登录,只是第一层。决定成败的是数据库层的 SQL 方言与驱动,以及最常被跳过的中间件与浏览器。
一、把「适配」拆成四层,逐层核对
厂商的适配清单是一张组合矩阵,上面的「支持」含义很窄:能安装、能连上。验收要自己往下拆四层。
芯片与操作系统
CPU 架构决定二进制能不能跑:鲲鹏、飞腾是 ARM,龙芯是 LoongArch,海光、兆芯是 x86。麒麟(Kylin)与统信 UOS 又各自分服务器版与桌面版。
核对动作:确认各组件有对应架构的安装包,JDK 与 glibc 版本满足要求,locale 与字体装齐,否则报表导出的中文会变成方块。
数据库
达梦 DM8、人大金仓 KingbaseES、OceanBase、GaussDB、TiDB 各有自己的兼容路线,差异全部落在 SQL 层。这一层单独展开,见第二节。
中间件
东方通 TongWeb、宝兰德 BES、金蝶 Apusic 都实现 Java EE Web 容器的主要规范,但不是全集。低代码平台若依赖私有 API、特定类加载(ClassLoader)行为或非标准部署描述符,就会卡住。
核对动作:把平台交付的 war 包或可执行 jar 部署上去,观察连接池是否泄漏、上传目录是否可写、会话超时是否一致。
浏览器
奇安信、360 安全浏览器在信创环境常见,内核往往落后主流 Chromium 若干版本。设计器大量使用可选链、空值合并,内核过低会直接白屏。
核对动作:在设计器里拖一个复杂表单,检查拖拽、撤销、代码编辑器语法高亮三项是否正常。
二、数据库层才是真考场:八个差异点
这是最容易在验收通过之后爆发的一层。八个点里,前三个能直接让页面报 500。
SQL 方言与分页写法
达梦以 Oracle 兼容为主,人大金仓以 PostgreSQL 兼容为主并另提供 Oracle 模式,OceanBase 分 MySQL 模式与 Oracle 模式,GaussDB 偏 PostgreSQL,TiDB 走 MySQL 协议。同一句分页 SQL,换库就可能语法报错。
分页尤其明显:Oracle 模式习惯 ROWNUM 两层嵌套或 OFFSET…FETCH,PostgreSQL 模式用 LIMIT…OFFSET,MySQL 模式用 LIMIT。引擎的动态 SQL 若写死一种,切库后翻页会缺行或报错。
验证方法:列表页每页 20 条翻到第 50 页,比对总条数与首页排序。
大小写敏感
PostgreSQL 系对未加引号的标识符统一折叠为小写,Oracle 模式折叠为大写,MySQL 在 Linux 上默认表名区分大小写。低代码自动建表常生成驼峰字段,切库后直接报「列不存在」。
验证方法:建含大写字母的表名与字段,跑查询、更新、关联各一次。
字符集
达梦与金仓在初始化实例时就要定字符集,事后修改代价很高。UTF-8 换成 GBK,生僻字、emoji、全角空格会变成问号,而且不报错。
验证方法:写入「𠮷」、一个 emoji、一个全角空格,再读出来做字节比对。
事务隔离级别
MySQL 默认 REPEATABLE READ,Oracle 与 PostgreSQL 默认 READ COMMITTED。审批常是「先查后改」,靠隔离级别兜住并发;换库后乐观锁失效,同一单据被两人先后审批通过。
验证方法:开两个会话,同时提交同一张单据,看是否只有一个成功。
驱动版本与连接参数
国产库的 JDBC 驱动多数要从厂商官网或 Maven 私服取,版本必须与数据库版本匹配。连接串参数名也各不相同,字符集、SSL、批量开关各写各的。
验证方法:让厂商给驱动包与推荐连接串,在自己环境验证,别只信测试机。
批量插入
MySQL 需要开启 rewriteBatchedStatements 才把多条 insert 合成一次网络往返;Oracle 模式走数组绑定;PostgreSQL 走多值 insert 或 COPY。写法不对,导一万行会慢一个数量级。
JSON 函数
动态表单常把扩展字段存成 JSON。MySQL 用 JSON_EXTRACT,PostgreSQL 用 -> 与 ->>,Oracle 用 JSON_VALUE,各家实现不同,切库后函数直接不存在。
时区与日期精度
有的库 TIMESTAMP 带时区、DATETIME 不带;CURRENT_TIMESTAMP 的精度从秒到微秒不等。审批超时、SLA 计时会整体偏移 8 小时。
三、中间件与浏览器:两层最容易漏的补测
中间件的问题集中在连接池、类加载、文件上传三处,都不在功能测试的覆盖范围里。
连接池泄漏测试期看不出来,跑一天后线程耗尽;类加载冲突表现为同包两版本共存,启动报 NoSuchMethodError;上传目录默认在临时路径,容器重启后附件丢失。
浏览器的问题集中在内核版本。除了白屏,还有打印控件、大文件分片上传、WebSocket 心跳三类。新 API 在低版本内核上不会降级,只会静默失败。
补测动作:用真实国产浏览器从登录走到导出打印,全程不切 Chrome。
补测重点取决于部署形态,见部署架构选型。
四、适配核对表
| 检查项 | 验证方法 | 不合格表现 |
|---|---|---|
| 分页与总数 | 列表翻到第 50 页,比对总条数与排序 | 缺行、重复行、翻页报错 |
| 表名字段大小写 | 建含大写字段的表并完成增删改查 | 列不存在、隐式建表失败 |
| 字符集与生僻字 | 写入 emoji、生僻字、全角空格后回读比对 | 显示问号、导出乱码 |
| 并发审批 | 两会话同时提交同一张单据 | 重复审批、状态互相覆盖 |
| 批量导入 | 一万行 Excel 导入并记录耗时 | 超时、部分成功、主键冲突 |
| 附件上传 | 上传 20MB 文件,重启中间件后再下载 | 文件丢失、路径 404 |
| 时区与超时 | 跨零点提交一条审批,核对超时计算 | 偏差 8 小时、精度丢秒 |
| 浏览器兼容 | 国产浏览器打开设计器与复杂表单 | 白屏、拖拽失效、打印错位 |
五、向厂商要八个答案
这八个问题在设计阶段问,并写进合同或技术附件;验收阶段再问只会扯皮。
- 适配组合矩阵:芯片 × 操作系统 × 数据库 × 中间件 × 浏览器,每一项标明具体版本号与验证日期。
- 驱动与连接串:国产库 JDBC 驱动的交付方式、版本号、Maven 坐标,以及推荐的连接参数。
- SQL 兼容报告:平台用了哪些方言特性、分页 SQL 如何生成、有没有独立的方言适配层。
- 性能基线:在哪种国产化组合、多大数据量、多少并发下测过;只给 TPS 不给场景的基线视为无效。
- 问题定级与响应时限(SLA):国产库兼容问题算产品缺陷还是定制开发,工单分级与响应、解决时限。
- 版本升级责任:国产库小版本升级后是否需要重新适配,由谁负责回归。
- 现场联调责任:出问题时平台方、数据库厂商、集成商三方谁主导定位,避免互相推。
- 兼容自检工具:是否提供 SQL 兼容自检脚本或测试用例集,能自己在目标环境跑一遍。
六、验收:拿真实业务 SQL 做回归
Hello World 只能证明连得上。回归要覆盖六类 SQL:列表分页、多条件组合查询、批量导入、审批提交与撤回、报表汇总、定时任务。
每组数据准备三档量级:空库、万级、十万级。空库验证语法,万级验证索引,十万级验证执行计划。只测空库是最常见的自欺。
把慢 SQL 打印出来存档,作为切换前后的对比基线。同一句 SQL 在两种库上耗时差一倍属于正常,差二十倍要查执行计划,而不是先怪硬件。
自托管平台在这里有个天然优势:数据访问收敛在服务端一层,方言差异可以集中处理。猫拽低代码(CatPull)采用「可视化设计器 + DSL Schema」路线,自托管部署时可把数据库适配收在服务端;但它不承诺开箱适配任意国产库,仍要按核对表逐项验证。改造路径见信创适配指南,本篇讲的是现状核对与验收方法。
验收结论要落成文档:哪几项通过、哪几项带条件通过、哪几项不通过及整改责任人与期限。口头说「没问题」,等于没做。数据主权怎么验证的导入导出思路,同样适用于判断数据是否落在自己的库里。
FAQs
Q1:厂商说已经适配达梦,还需要自己测吗?
A:要。厂商的适配通常指平台自身表结构与基础增删改查跑通,你的业务字段、复杂查询、报表 SQL 不在其测试范围内。用自己的真实数据做一轮回归,成本远低于上线后返工。
Q2:信创项目一定要换浏览器吗?
A:不一定,取决于终端管控策略。若终端已统一配发国产浏览器,就必须在它上面完成验收;若允许安装 Chrome,可以按内核版本要求放宽。关键是提前确认,别在上线周才发现装不了。
Q3:OceanBase 和 TiDB 的适配难度一样吗?
A:不一样。OceanBase 有 MySQL 与 Oracle 两种模式,TiDB 走 MySQL 协议。模式一旦选错,等于换了一种 SQL 方言,适配工作量完全不同。签约前先把模式定下来,再谈适配清单。
猫拽智库