首批通过分布式安全可靠测评,为关键业务系统打造
与 MySQL 兼容性对比
更新时间:2026-04-07 20:57:19
本节主要介绍 OceanBase 数据库的 MySQL 模式与原生 MySQL 数据库的兼容性对比信息。
OceanBase 数据库的 MySQL 模式兼容 MySQL 5.7/8.0 的绝大部分功能和语法。由于产品架构不同,或者客户需求不大,有些功能并没有被支持。本节主要从以下几方面介绍 OceanBase 数据库的 MySQL 模式与原生 MySQL 数据库的不同:
数据类型
SQL 语法
过程性语言
系统视图
字符集
字符序
函数与表达式
分区支持
备份恢复
存储引擎
优化器
数据类型
OceanBase 数据库支持的数据类型有:
数值类型
整数类型:
BOOL/BOOLEAN/TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER和BIGINT。定点类型:
DECIMAL和NUMERIC。浮点类型:
FLOAT和DOUBLE。Bit-Value 类型:
BIT。
日期时间类型:
DATETIME、TIMESTAMP、DATE、TIME和YEAR。字符类型:
CHAR、VARCHAR、BINARY和VARBINARY。大对象类型:
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。文本类型:
TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT和STRING。说明
对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持文本数据类型
STRING。枚举类型:
ENUM。集合类型:
SET。JSON 数据类型
空间数据类型
高效压缩位图数据类型
数组数据类型
向量数据类型
SQL 语法
SELECT
支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内联接、半联接以及外联接;支持分组、聚合;支持常见的概率、线性回归等数据挖掘函数等。
支持对多个
SELECT查询的结果进行UNION、UNION ALL、MINUS、EXCEPT或INTERSECT等集合操作。支持使用
EXPLAIN语法查看执行计划。
INSERT
支持单行和多行插入数据,同时支持指定分区插入数据。
支持
INSERT INTO ... SELECT ...语句。
UPDATE
支持单列和多列更新数据。
支持使用子查询更新数据。
支持集合更新数据。
DELETE
- 支持单表和多表删除。
TRUNCATE
- 支持完全清空指定表。
SELECT
- 不支持
SELECT ... FOR SHARE ...语法。
TRUNCATE
- 不支持在进行事务处理和表锁定的过程中操作。
过程性语言
OceanBase 数据库兼容了大部分 MySQL 数据库的 PL 功能,主要支持的 PL 功能如下:
- 数据类型
- 存储过程
- 自定义函数
- 触发器
- 异常处理
此外,OceanBase 数据库特有的 MySQL PL 系统包,包括 DBMS_RESOURCE_MANAGER、DBMS_STATS、DBMS_UDR、DBMS_XPLAN 和 DBMS_WORKLOAD_REPOSITORY 等。
更多 PL 功能的详细信息,请参见 PL 参考。
系统视图
OceanBase 数据库实现了 information_schema 和 mysql 这两个内部数据库中的大部分视图,但是由于架构不同,OceanBase 数据库并不保证所有视图均能实现以及视图中所有的列含义与 MySQL 相同。
更多系统视图的说明信息请参考《参考指南》文档中 系统视图 章节。
字符集
OceanBase 数据库支持的字符集如下:
binary
utf8mb4/utf8mb3
说明
utf8mb3是utf8mb4的别名。gbk
utf16
utf16le
gb18030
latin1
gb18030_2022
ascii
tis620
sjis
big5
dec8
gb2312
ujis
euckr
eucjpms
cp932
cp850
hp8
macroman
swe7
说明
对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持字符集:gb2312、ujis、euckr、eucjpms、cp932、cp850、hp8、macroman 和 swe7。
字符序
OceanBase 数据库支持的字符序如下表所示。
| 字符序 | 所属字符集 | 说明 |
|---|---|---|
| utf8mb4_general_ci | utf8mb4 | 使用通用排序规则。 |
| utf8mb4_bin | utf8mb4 | 使用二进制排序规则。 |
| utf8mb4_unicode_ci | utf8mb4 | 使用基于 Unicode Collation Algorithm (UCA) 的排序规则。 |
| utf8mb4_unicode_520_ci | utf8mb4 | 使用 Unicode 5.2.0 版本的排序规则。它遵循 Unicode 码点排序,并忽略字符的大小写差异。 |
| utf8mb4_croatian_ci | utf8mb4 | 使用克罗地亚文(Croatian)的排序规则。utf8mb4_croatian_ci 兼容 utf8_croatian_ci。 |
| utf8mb4_czech_ci | utf8mb4 | 使用捷克文(Czech)的排序规则。 |
| utf8mb4_0900_ai_ci | utf8mb4 | 使用 Unicode 9.0.0 版本的字符排序规则和顺序,同时忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。 |
| binary | binary | 使用二进制排序规则。 |
| gbk_chinese_ci | gbk | 使用中文语言排序规则。 |
| gbk_bin | gbk | 使用二进制排序规则。 |
| utf16_general_ci | utf16 | 使用通用排序规则。 |
| utf16_bin | utf16 | 使用二进制排序规则。 |
| utf16_unicode_ci | utf16 | 使用基于 Unicode Collation Algorithm (UCA) 的排序规则。 |
| utf8mb4_german2_ci | utf16le | 使用德语排序规则。 |
| utf8mb4_croatian_ci | utf16le | 使用克罗地亚语排序规则。 |
| gb18030_chinese_ci | gb18030 | 使用中文语言排序规则。 |
| gb18030_bin | gb18030 | 使用二进制排序规则。 |
| latin1_swedish_ci | latin1 | 使用瑞典语/芬兰语排序规则。 |
| latin1_german1_ci | latin1 | 用于德国(German)语言环境下的 latin1 字符集的排序规则。 |
| latin1_danish_ci | latin1 | 用于丹麦(Danish)语言环境下的 latin1 字符集的排序规则。 |
| latin1_german2_ci | latin1 | 用于德语环境,适用于需要按照字典顺序进行字符比较的应用场景。 |
| latin1_general_ci | latin1 | 用于需要不区分大小写且支持重音符号的场景,如某些欧洲语言的数据库设计。 |
| latin1_general_cs | latin1 | 用于区分大小写的通用排序规则,支持多种语言(如西欧语言)。 |
| latin1_spanish_ci | latin1 | 用于西班牙(Spanish)语言环境的排序规则。 |
| latin1_bin | latin1 | latin1 使用二进制排序规则。 |
| gb18030_2022_bin | gb18030_2022 | 使用二进制排序规则。 |
| gb18030_2022_chinese_ci | gb18030_2022 | 使用拼音排序规则。不区分大小写。MySQL 模式下该字符集的默认字符序。 |
| gb18030_2022_chinese_cs | gb18030_2022 | 使用拼音排序规则。区分大小写。 |
| gb18030_2022_radical_ci | gb18030_2022 | 使用部首笔画排序规则。不区分大小写。 |
| gb18030_2022_radical_cs | gb18030_2022 | 使用部首笔画排序规则。区分大小写。 |
| gb18030_2022_stroke_ci | gb18030_2022 | 使用笔画排序规则。不区分大小写。 |
| gb18030_2022_stroke_cs | gb18030_2022 | 使用笔画排序规则。区分大小写。 |
| ascii_bin | ascii | 使用二进制排序规则。 |
| ascii_general_ci | ascii | 使用基于字母的不区分大小写的排序规则。它忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。 |
| tis620_bin | tis620 | 使用二进制排序规则。 |
| tis620_thai_ci | tis620 | 使用泰语排序规则,不区分大小写。 |
| sjis_japanese_ci | sjis | 使用日语排序规则。 |
| dec8_swedish_ci | dec8 | 使用瑞典语排序规则。 |
| gb2312_chinese_ci | gb2312 | 使用 GB2312 字符集,按照中文排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| gb2312_bin | gb2312 | 使用 GB2312 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| ujis_japanese_ci | ujis | 使用 UJIS 字符集,按照日语排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| ujis_bin | ujis | 使用 UJIS 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| euckr_korean_ci | euckr | 使用 EUCKR 字符集,按照韩语排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| euckr_bin | euckr | 使用 EUCKR 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| eucjpms_japanese_ci | eucjpms | 使用 EUCJPMS 字符集,按照日语排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| eucjpms_bin | eucjpms | 使用 EUCJPMS 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| cp932_japanese_ci | cp932 | 使用 CP932 字符集,按照日语排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| cp932_bin | cp932 | 使用 CP932 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| cp850_general_ci | cp850 | 使用 CP850 字符集,按照通用排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| cp850_bin | cp850 | 使用 CP850 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| hp8_english_ci | hp8 | 使用 HP8 字符集,按照英语排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| hp8_bin | hp8 | 使用 HP8 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| macroman_general_ci | macroman | 使用 MacRoman 字符集,按照通用排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| macroman_bin | macroman | 使用 MacRoman 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| swe7_swedish_ci | swe7 | 使用 SWE7 字符集,按照瑞典语排序规则进行不区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
| swe7_bin | swe7 | 使用 SWE7 字符集,按照二进制顺序进行区分大小写的排序。
说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
函数
OceanBase 数据库所支持的分析(窗口)函数是 MySQL 数据库的超集,即 MySQL 数据库的分析(窗口)函数 OceanBase 数据库都支持。
与 MySQL 数据库对比,OceanBase 数据库的 MySQL 模式不支持如下函数:
字符串函数:
LOAD_FILE()和MATCH()。XML 函数:
ExtractValue()和UpdateXML()。其他函数:
MASTER_POS_WAIT()。
分区支持
OceanBase 数据库与 MySQL 数据库对分区的支持差异如下:
OceanBase 数据库支持一级分区,模板化和非模板化二级分区;MySQL 数据库不支持非模板化二级分区。
OceanBase 数据库的二级分区支持 Hash、Key、Range、Range Columns、List 和 List Columns 分区;MySQL 数据库的二级分区仅支持 Hash 分区和 Key 分区。
OceanBase 数据库二级分区表支持添加和删除二级分区;MySQL 数据库不支持添加和删除二级分区。
注意
- 不支持二级分区类型是 Hash 或 Key 类型的场景新增和删除二级分区。
- 对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持新增二级分区。
更多分区的说明及使用,请参见 分区概述。
备份恢复
OceanBase 数据库兼容了部分 MySQL 数据库的备份恢复特性。
支持全量备份和增量备份。
支持热备份。
支持表级和数据库级恢复。
支持指定路径的恢复。
支持日志归档和备份数据的校验。
不支持集群级别的备份恢复。
不支持冷备份。
不支持租户内部部分数据库以及表级的备份。
存储引擎
与 MySQL 数据库基于数据块的 InnoDB 和 Myisam 引擎不同,OceanBase 数据库使用的是基于 LSM-Tree 架构的存储引擎。
优化器
OceanBase 数据库兼容了部分 MySQL 数据库的优化器功能。有关优化器的详细信息,请参见 SQL 调优指南。
查看执行计划的命令
- 输出的列信息仅包含
ID、OPERATOR、NAME、EST. ROWS和COST以及算子的详细信息。
- 输出的列信息仅包含
查看统计信息
支持执行
ANALYZE TABLE语句手动查询数据字典表存储有关列值的直方图统计信息。支持通过视图自动查看表统计信息和列统计信息。
查询改写优化
支持外联接优化。
支持外联接简化。
支持块嵌套循环和批量 Key 访问联接。
支持条件过滤。
支持常量叠算优化。
支持
IS NULL优化 (索引不存储NULL值)。支持
ORDER BY优化。支持
GROUP BY优化。支持
DISTINCT消除。支持
LIMIT下压。支持 Window 函数优化。
支持避免全表扫描。
支持谓词下压。
Optimizer Hint 机制
支持联接顺序 Optimizer Hints。
支持表级别的 Optimizer Hints。
支持索引级别的 Optimizer Hints。
语法支持
INDEXHint、FULLHint、ORDEREDHint 和LEADINGHint 等。
兼容 MySQL 数据库的并行执行能力包括并行查询、并行复制和并行写入等,且 OceanBase 数据库已经支持并行算子,包括并行聚集、并行联接、并行分组以及并行排序等。
OceanBase 数据库还支持计划缓存和预编译,MySQL 数据库并不支持。
查看执行计划的命令
- 不支持使用
SHOW WARNINGS显示额外的信息。
- 不支持使用