一、总体兼容性概览

数据库 兼容模式 Oracle 兼容度 MySQL 兼容度 备注
达梦 DM Oracle 模式 / MySQL 模式 ★★★★☆(高) ★★☆☆☆(低) 默认 Oracle 模式,语法最接近 Oracle
人大金仓 KingbaseES Oracle / PostgreSQL 模式 ★★★★☆ ★★☆☆☆ 基于 PostgreSQL,Oracle 模式较成熟
神通 OSCAR Oracle 模式为主 ★★★★☆ ★★☆☆☆ 宣称高度兼容 Oracle
华为 GaussDB Oracle 模式 / MySQL 模式 ★★★★★(极高) ★★★★☆(高) 企业级,兼容性最好,支持语法转换工具

  • 从 Oracle 迁移 → 优先选 GaussDB 或 达梦
  • 从 MySQL 迁移 → 优先选 GaussDB(MySQL 模式)
  • 基于开源生态 → 选 KingbaseES(PostgreSQL 基础)

具体语法差异详解


1️⃣ 数据定义语言(DDL)

① 创建表与字段类型

功能 Oracle MySQL 达梦 DM 人大金仓 KingbaseES 神通 OSCAR GaussDB(Oracle模式)
自增主键 SEQUENCE + TRIGGER AUTO_INCREMENT IDENTITY(1,1) SERIAL 或 GENERATED BY DEFAULT AS IDENTITY IDENTITY(1,1) GENERATED BY DEFAULT AS IDENTITY 或序列
CLOB 类型 CLOB LONGTEXT TEXT 或 CLOB TEXT CLOB CLOB
BLOB 类型 BLOB LONGBLOB BLOB BYTEA BLOB BLOB
日期类型 DATE DATETIME DATE TIMESTAMP DATE DATE
默认值当前时间 SYSDATE NOW() SYSDATE 或 CURRENT_TIMESTAMP CURRENT_TIMESTAMP SYSDATE SYSDATE
表空间指定 TABLESPACE xxx 不支持 TABLESPACE xxx TABLESPACE xxx TABLESPACE xxx TABLESPACE xxx

📌 注意

  • 达梦、神通、GaussDB 在 Oracle 模式下支持 VARCHAR2,KingbaseES 不支持(用 VARCHAR)。
  • MySQL 的 ENGINE=InnoDB 在国产库中无效,需删除。

2️⃣ 数据操作语言(DML) & 查询语法

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

数据库 分页语法
Oracle SELECT * FROM (SELECT ROWNUM rn, t.* FROM tab t WHERE ROWNUM <= ?) WHERE rn > ?
MySQL LIMIT ? OFFSET ?
达梦 DM LIMIT ? OFFSET ? 或 ROWNUM(兼容 Oracle)
KingbaseES LIMIT ? OFFSET ? (PostgreSQL 语法)
神通 OSCAR LIMIT ? OFFSET ? 或 ROWNUM
GaussDB LIMIT ? OFFSET ? 或 ROWNUM(Oracle 模式)

建议:统一使用 LIMIT m OFFSET n,GaussDB/达梦/神通都支持。若用 MyBatis-Plus,可配置方言自动适配。


② 字符串连接

数据库 语法
Oracle `'a'
MySQL CONCAT('a','b')
达梦 `
KingbaseES `
神通 `
GaussDB `

③ NVL / IFNULL / COALESCE

数据库 NULL 替换函数
Oracle NVL(expr1, expr2)
MySQL IFNULL(expr1, expr2)
达梦 NVL
KingbaseES COALESCE(推荐)
神通 NVL
GaussDB NVL(Oracle 模式)

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


3️⃣ 函数差异

① 日期函数

功能 Oracle MySQL 达梦 KingbaseES 神通 GaussDB
当前日期时间 SYSDATE NOW() SYSDATE CURRENT_TIMESTAMP SYSDATE SYSDATE
格式化日期 TO_CHAR(date, 'YYYY-MM-DD') DATE_FORMAT(date, '%Y-%m-%d') TO_CHAR TO_CHAR TO_CHAR TO_CHAR
日期加减 date + 1 DATE_ADD(date, INTERVAL 1 DAY) date + 1 date + INTERVAL '1 day' date + 1 date + 1

📌 KingbaseES 基于 PG,日期运算需用 INTERVAL,与其他库差异较大。

具体语法差异详解


1️⃣ 数据定义语言(DDL)

① 创建表与字段类型

功能 Oracle MySQL 达梦 DM 人大金仓 KingbaseES 神通 OSCAR GaussDB(Oracle模式)
自增主键 SEQUENCE + TRIGGER AUTO_INCREMENT IDENTITY(1,1) SERIAL 或 GENERATED BY DEFAULT AS IDENTITY IDENTITY(1,1) GENERATED BY DEFAULT AS IDENTITY 或序列
CLOB 类型 CLOB LONGTEXT TEXT 或 CLOB TEXT CLOB CLOB
BLOB 类型 BLOB LONGBLOB BLOB BYTEA BLOB BLOB
日期类型 DATE DATETIME DATE TIMESTAMP DATE DATE
默认值当前时间 SYSDATE NOW() SYSDATE 或 CURRENT_TIMESTAMP CURRENT_TIMESTAMP SYSDATE SYSDATE
表空间指定 TABLESPACE xxx 不支持 TABLESPACE xxx TABLESPACE xxx TABLESPACE xxx TABLESPACE xxx

📌 注意

  • 达梦、神通、GaussDB 在 Oracle 模式下支持 VARCHAR2,KingbaseES 不支持(用 VARCHAR)。
  • MySQL 的 ENGINE=InnoDB 在国产库中无效,需删除。

2️⃣ 数据操作语言(DML) & 查询语法

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

数据库 分页语法
Oracle SELECT * FROM (SELECT ROWNUM rn, t.* FROM tab t WHERE ROWNUM <= ?) WHERE rn > ?
MySQL LIMIT ? OFFSET ?
达梦 DM LIMIT ? OFFSET ? 或 ROWNUM(兼容 Oracle)
KingbaseES LIMIT ? OFFSET ? (PostgreSQL 语法)
神通 OSCAR LIMIT ? OFFSET ? 或 ROWNUM
GaussDB LIMIT ? OFFSET ? 或 ROWNUM(Oracle 模式)

建议:统一使用 LIMIT m OFFSET n,GaussDB/达梦/神通都支持。若用 MyBatis-Plus,可配置方言自动适配。


② 字符串连接

数据库 语法
Oracle `'a'
MySQL CONCAT('a','b')
达梦 `
KingbaseES `
神通 `
GaussDB `

③ NVL / IFNULL / COALESCE

数据库 NULL 替换函数
Oracle NVL(expr1, expr2)
MySQL IFNULL(expr1, expr2)
达梦 NVL
KingbaseES COALESCE(推荐)
神通 NVL
GaussDB NVL(Oracle 模式)

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


3️⃣ 函数差异

① 日期函数

功能 Oracle MySQL 达梦 KingbaseES 神通 GaussDB
当前日期时间 SYSDATE NOW() SYSDATE CURRENT_TIMESTAMP SYSDATE SYSDATE
格式化日期 TO_CHAR(date, 'YYYY-MM-DD') DATE_FORMAT(date, '%Y-%m-%d') TO_CHAR TO_CHAR TO_CHAR TO_CHAR
日期加减 date + 1 DATE_ADD(date, INTERVAL 1 DAY) date + 1 date + INTERVAL '1 day' date + 1 date + 1

📌 KingbaseES 基于 PG,日期运算需用 INTERVAL,与其他库差异较大。

5️⃣ 系统视图 & 元数据查询

查询表结构:

数据库 查询表字段语句(示例)
Oracle SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'XXX'
MySQL DESC table_name 或 SHOW COLUMNS FROM table_name
达梦 SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'XXX'(兼容 Oracle)
KingbaseES SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'xxx'(PG 风格)
神通 SELECT * FROM SYS.SYSTABLES t, SYS.SYSCOLUMNS c WHERE ...(私有视图,文档较少)
GaussDB SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'XXX'(Oracle 模式)

建议

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

6️⃣ 特殊语法/限制

① 达梦(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
    • 自动处理函数、分页、类型等差异

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

特性 Oracle MySQL 达梦 人大金仓 神通 GaussDB
分页 ROWNUM LIMIT LIMIT/ROWNUM LIMIT LIMIT/ROWNUM LIMIT/ROWNUM
自增主键 序列+触发器 AUTO_INCREMENT IDENTITY SERIAL IDENTITY IDENTITY/序列
字符串连接 || CONCAT || || || ||
NULL处理 NVL IFNULL NVL COALESCE NVL NVL
日期函数 TO_CHAR DATE_FORMAT TO_CHAR TO_CHAR TO_CHAR TO_CHAR
元数据视图 USER_% INFORMATION_SCHEMA USER_% INFORMATION_SCHEMA SYS.% USER_%
大小写敏感 否(大写存) 是(按创建) 否(可配置) 是(小写存) 否(可配置)
DUAL表 ❌(需建)
企业级支持 ✅✅✅

✅ 最佳实践建议

  1. 新项目选型

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

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

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

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

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐