当前位置: 代码网 > it编程>数据库>Mysql > MySql/Oracle数据库项目改造适配信创国产数据库的方法详解

MySql/Oracle数据库项目改造适配信创国产数据库的方法详解

2025年11月18日 Mysql 我要评论
一、总体兼容性概览数据库兼容模式oracle 兼容度mysql 兼容度备注达梦 dmoracle 模式 / mysql 模式★★★★☆(高)★★☆☆☆(低)默认 oracle 模式,语法最接近 ora

一、总体兼容性概览

数据库兼容模式oracle 兼容度mysql 兼容度备注
达梦 dmoracle 模式 / mysql 模式★★★★☆(高)★★☆☆☆(低)默认 oracle 模式,语法最接近 oracle
人大金仓 kingbaseesoracle / postgresql 模式★★★★☆★★☆☆☆基于 postgresql,oracle 模式较成熟
神通 oscaroracle 模式为主★★★★☆★★☆☆☆宣称高度兼容 oracle
华为 gaussdboracle 模式 / mysql 模式★★★★★(极高)★★★★☆(高)企业级,兼容性最好,支持语法转换工具
  • 从 oracle 迁移 → 优先选 gaussdb 或 达梦
  • 从 mysql 迁移 → 优先选 gaussdb(mysql 模式)
  • 基于开源生态 → 选 kingbasees(postgresql 基础)

具体语法差异详解

数据定义语言(ddl)

① 创建表与字段类型

功能oraclemysql达梦 dm人大金仓 kingbasees神通 oscargaussdb(oracle模式)
自增主键sequence + triggerauto_incrementidentity(1,1)serial 或 generated by default as identityidentity(1,1)generated by default as identity 或序列
clob 类型cloblongtexttext 或 clobtextclobclob
blob 类型bloblongblobblobbyteablobblob
日期类型datedatetimedatetimestampdatedate
默认值当前时间sysdatenow()sysdate 或 current_timestampcurrent_timestampsysdatesysdate
表空间指定tablespace xxx不支持tablespace xxxtablespace xxxtablespace xxxtablespace xxx

📌 注意

  • 达梦、神通、gaussdb 在 oracle 模式下支持 varchar2,kingbasees 不支持(用 varchar)。
  • mysql 的 engine=innodb 在国产库中无效,需删除。

数据操作语言(dml) & 查询语法

① 分页查询(最常见差异!)

数据库分页语法
oracleselect * from (select rownum rn, t.* from tab t where rownum <= ?) where rn > ?
mysqllimit ? offset ?
达梦 dmlimit ? offset ? 或 rownum(兼容 oracle)
kingbaseeslimit ? offset ? (postgresql 语法)
神通 oscarlimit ? offset ? 或 rownum
gaussdblimit ? offset ? 或 rownum(oracle 模式)

建议:统一使用 limit m offset n,gaussdb/达梦/神通都支持。若用 mybatis-plus,可配置方言自动适配。

② 字符串连接

数据库语法
oracle`'a'
mysqlconcat('a','b')
达梦`
kingbasees`
神通`
gaussdb`

③ nvl / ifnull / coalesce

数据库null 替换函数
oraclenvl(expr1, expr2)
mysqlifnull(expr1, expr2)
达梦nvl
kingbaseescoalesce(推荐)
神通nvl
gaussdbnvl(oracle 模式)

✅ 建议统一使用标准 coalesce(expr1, expr2, ...),所有数据库都支持。

函数差异

① 日期函数

功能oraclemysql达梦kingbasees神通gaussdb
当前日期时间sysdatenow()sysdatecurrent_timestampsysdatesysdate
格式化日期to_char(date, 'yyyy-mm-dd')date_format(date, '%y-%m-%d')to_charto_charto_charto_char
日期加减date + 1date_add(date, interval 1 day)date + 1date + interval '1 day'date + 1date + 1

📌 kingbasees 基于 pg,日期运算需用 interval,与其他库差异较大。

具体语法差异详解

数据定义语言(ddl)

① 创建表与字段类型

功能oraclemysql达梦 dm人大金仓 kingbasees神通 oscargaussdb(oracle模式)
自增主键sequence + triggerauto_incrementidentity(1,1)serial 或 generated by default as identityidentity(1,1)generated by default as identity 或序列
clob 类型cloblongtexttext 或 clobtextclobclob
blob 类型bloblongblobblobbyteablobblob
日期类型datedatetimedatetimestampdatedate
默认值当前时间sysdatenow()sysdate 或 current_timestampcurrent_timestampsysdatesysdate
表空间指定tablespace xxx不支持tablespace xxxtablespace xxxtablespace xxxtablespace xxx

📌 注意

  • 达梦、神通、gaussdb 在 oracle 模式下支持 varchar2,kingbasees 不支持(用 varchar)。
  • mysql 的 engine=innodb 在国产库中无效,需删除。

数据操作语言(dml) & 查询语法

① 分页查询(最常见差异!)

数据库分页语法
oracleselect * from (select rownum rn, t.* from tab t where rownum <= ?) where rn > ?
mysqllimit ? offset ?
达梦 dmlimit ? offset ? 或 rownum(兼容 oracle)
kingbaseeslimit ? offset ? (postgresql 语法)
神通 oscarlimit ? offset ? 或 rownum
gaussdblimit ? offset ? 或 rownum(oracle 模式)

建议:统一使用 limit m offset n,gaussdb/达梦/神通都支持。若用 mybatis-plus,可配置方言自动适配。

② 字符串连接

数据库语法
oracle`'a'
mysqlconcat('a','b')
达梦`
kingbasees`
神通`
gaussdb`

③ nvl / ifnull / coalesce

数据库null 替换函数
oraclenvl(expr1, expr2)
mysqlifnull(expr1, expr2)
达梦nvl
kingbaseescoalesce(推荐)
神通nvl
gaussdbnvl(oracle 模式)

✅ 建议统一使用标准 coalesce(expr1, expr2, ...),所有数据库都支持。

函数差异

① 日期函数

功能oraclemysql达梦kingbasees神通gaussdb
当前日期时间sysdatenow()sysdatecurrent_timestampsysdatesysdate
格式化日期to_char(date, 'yyyy-mm-dd')date_format(date, '%y-%m-%d')to_charto_charto_charto_char
日期加减date + 1date_add(date, interval 1 day)date + 1date + interval '1 day'date + 1date + 1

📌 kingbasees 基于 pg,日期运算需用 interval,与其他库差异较大。

系统视图 & 元数据查询

查询表结构:

数据库查询表字段语句(示例)
oracleselect * from user_tab_columns where table_name = 'xxx'
mysqldesc table_name 或 show columns from table_name
达梦select * from user_tab_columns where table_name = 'xxx'(兼容 oracle)
kingbaseesselect * from information_schema.columns where table_name = 'xxx'(pg 风格)
神通select * from sys.systables t, sys.syscolumns c where ...(私有视图,文档较少)
gaussdbselect * from user_tab_columns where table_name = 'xxx'(oracle 模式)

建议

  • oracle/达梦/gaussdb 可共用一套元数据查询语句。
  • kingbasees 使用标准 information_schema
  • 神通需查阅私有字典表,迁移成本高。

特殊语法/限制

① 达梦(dm)

  • 默认不区分大小写(可配置),对象名大写存储。
  • 支持 dual 表(兼容 oracle)。
  • 分页推荐 limit m offset n
  • 不支持 create or replace view,需先 drop

② 人大金仓(kingbasees)

  • 基于 postgresql,大小写敏感,对象名小写存储(除非双引号)。
  • 不支持 varchar2,用 varchar
  • 支持窗口函数、cte,功能强大。
  • 序列使用 nextval('seq_name')

③ 神通(oscar)

  • 语法最接近 oracle。
  • 文档和工具链较弱,社区支持少。
  • 对 rownumdualsysdate 支持良好。

④ 华为高斯(gaussdb)

  • 支持“oracle 兼容模式”和“mysql 兼容模式”,启动时指定。
  • 提供 sql翻译器(sql transform tool),自动转换 oracle/mysql 语法。
  • 支持分布式事务、全局时间戳(适合金融级应用)。
  • 企业级功能最完善,但授权费用高。

三、迁移建议与工具

通用迁移策略:

  1. sql 语法标准化

    • 用 coalesce 代替 nvl/ifnull
    • 用 limit/offset 代替 rownum
    • 避免使用数据库私有函数(如 oracle 的 decode → 改用 case when
  2. 使用方言插件
    • mybatis-plus:内置达梦、人大金仓、gaussdb 方言
    • jpa/hibernate:配置对应 dialect
  3. gaussdb sql翻译工具(强烈推荐):

    • 华为提供 gui 工具,可批量转换 oracle/mysql 脚本 → gaussdb
    • 自动处理函数、分页、类型等差异

四、总结对比表(快速查阅)

特性oraclemysql达梦人大金仓神通gaussdb
分页rownumlimitlimit/rownumlimitlimit/rownumlimit/rownum
自增主键序列+触发器auto_incrementidentityserialidentityidentity/序列
字符串连接||concat||||||||
null处理nvlifnullnvlcoalescenvlnvl
日期函数to_chardate_formatto_charto_charto_charto_char
元数据视图user_%information_schemauser_%information_schemasys.%user_%
大小写敏感否(大写存)是(按创建)否(可配置)是(小写存)否(可配置)
dual表❌(需建)
企业级支持✅✅✅

最佳实践建议

  1. 新项目选型

    • 金融/电信/政企 → gaussdb
    • 信创替代 oracle → 达梦 或 神通
    • 开源生态/云原生 → 人大金仓
  2. 老系统迁移

    • 从 oracle → 优先 gaussdb(兼容最好),次选达梦
    • 从 mysql → 优先 gaussdb(mysql 模式),次选人大金仓
  3. 开发规范

    • 避免使用数据库私有语法
    • 使用标准 sql + 多方言适配
    • 抽象 dao 层,隔离数据库差异
  4. 测试验证

    • 必须做全量 sql 回归测试
    • 验证分页、函数、事务、性能

总结 

到此这篇关于mysql/oracle数据库项目改造适配信创国产数据库的文章就介绍到这了,更多相关mysql/oracle改造适配信创国产数据库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com