openGauss 支持的四种兼容模式

openGauss 支持的四种兼容模式(A、B、PG、C)在 SQL 语法层面存在明显差异,下面按"典型语法/行为差异各模式表现"的对比方式,给出一份可直接落地的速查表。所有信息均来自官方文档及社区最新资料(截至 2024-10)。


🎯 1. 空字符串与 NULL 的判定

表格

复制

典型写法 A(Oracle) B(MySQL) PG(PostgreSQL) C(TD)
'' IS NULL TRUE FALSE FALSE TRUE
'' = '' NULL(未知) TRUE TRUE NULL

👉 影响

  • A/C 模式下,前端或 ORM 传空字符串时,数据库内部会当成 NULL 存储,导致唯一索引、CHECK 约束行为与预期不符。
  • B/PG 模式保持原义,迁移 MySQL/PostgreSQL 时无需改动业务代码。

🎯 2. 日期/时间类型映射

表格

复制

源类型 A(Oracle) B(MySQL) PG(PostgreSQL) C(TD)
DATE TIMESTAMP(0) DATE DATE TIMESTAMP(0)
TIMESTAMP TIMESTAMP(6) DATETIME/TIMESTAMP TIMESTAMP TIMESTAMP(6)

👉 影响

  • 在 A 模式下,Oracle 的 DATE 含时分秒,迁移到 openGauss 后字段类型自动变成 TIMESTAMP(0),避免精度丢失。
  • B 模式下可直接复用 MySQL 的 DATETIME 语义。

🎯 3. 分页与 LIMIT 语法

表格

复制

场景 A(Oracle) B(MySQL) PG(PostgreSQL) C(TD)
基本分页 ROWNUM / 子查询 LIMIT x OFFSET y LIMIT x OFFSET y TOP n
FETCH 语法 支持 ANSI FETCH FIRST 支持 LIMIT 支持 LIMIT/FETCH 支持 TOP

👉 结论

  • 从 MySQL/PostgreSQL 迁移到 openGauss 时,B 或 PG 模式 可 100 % 沿用原 LIMIT 写法;
  • A 模式需改写成 Oracle 风格(嵌套子查询 + ROWNUM)。

🎯 4. 字符串拼接

表格

复制

写法 A(Oracle) B(MySQL) PG(PostgreSQL) C(TD)
` ` 拼接 逻辑 OR 拼接 拼接
CONCAT(str1,str2) 支持 支持 支持 支持

👉 注意

  • 在 B 模式中,|| 被解析为"逻辑 OR",必须用 CONCAT() 或改写 SQL。

🎯 5. 双引号与大小写

表格

复制

规则 A(Oracle) B(MySQL) PG(PostgreSQL) C(TD)
双引号 "col" 区分大小写 不区分(视为普通字符) 区分大小写 区分大小写
单引号 'str' 字符串 字符串 字符串 字符串

👉 迁移提示

  • 从 Oracle 迁移到 openGauss(A 模式)时,保留双引号即可;
  • 从 MySQL 迁移到 B 模式时,需去掉双引号,防止列名大小写敏感导致查询失败。

🎯 6. 自增/序列

表格

复制

机制 A(Oracle) B(MySQL) PG(PostgreSQL) C(TD)
自增关键字 SEQUENCEIDENTITY AUTO_INCREMENT SERIAL / IDENTITY IDENTITY
插入显式 0 允许 允许(需额外参数) 允许 允许

👉 迁移提示

  • B 模式下,仅加载 dolphin 插件后才支持 AUTO_INCREMENT 语法。

🎯 7. 系统函数差异(部分高频函数)

表格

复制

函数 A(Oracle) B(MySQL) PG(PostgreSQL)
当前日期 SYSDATE CURDATE() CURRENT_DATE
字符串长度 LENGTH() CHAR_LENGTH() / LENGTH() LENGTH()
空值替换 NVL() IFNULL() COALESCE()

✅ 一句话总结

  • Oracle 迁移 → 选 A 模式,注意空串变 NULL、DATE 变 TIMESTAMP。
  • MySQL 迁移 → 选 B 模式 ,需加载 dolphin 插件;||AUTO_INCREMENT 需改写。
  • PostgreSQL 迁移 → 选 PG 模式,语法基本零改动,官方推荐。
  • Teradata 迁移 → C 模式已废弃,不建议使用
相关推荐
武子康17 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr17 小时前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
源码获取_wx:Fegn089517 小时前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
独断万古他化18 小时前
【Spring 核心: IoC&DI】从原理到注解使用、注入方式全攻略
java·后端·spring·java-ee
毕设源码_郑学姐18 小时前
计算机毕业设计springboot基于HTML5的酒店预订管理系统 基于Spring Boot框架的HTML5酒店预订管理平台设计与实现 HTML5与Spring Boot技术驱动的酒店预订管理系统开
spring boot·后端·课程设计
不吃香菜学java18 小时前
spring-依赖注入
java·spring boot·后端·spring·ssm
ja哇18 小时前
Spring AOP 详细讲解
java·后端·spring
南部余额18 小时前
Spring Boot 整合 MinIO:封装常用工具类简化文件上传、启动项目初始化桶
java·spring boot·后端·文件上传·工具类·minio·minioutils
海南java第二人18 小时前
Spring Bean生命周期深度剖析:从创建到销毁的完整旅程
java·后端·spring
QQ196328847518 小时前
ssm基于Springboot+的球鞋销售商城网站vue
vue.js·spring boot·后端