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) |
---|---|---|---|---|
自增关键字 | SEQUENCE 或 IDENTITY |
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() |