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。
-
语法支持
INDEX
Hint、FULL
Hint、ORDERED
Hint 和LEADING
Hint 等。
-
-
兼容 MySQL 数据库的并行执行能力包括并行查询、并行复制和并行写入等,且 OceanBase 数据库已经支持并行算子,包括并行聚集、并行联接、并行分组以及并行排序等。
-
OceanBase 数据库还支持计划缓存和预编译,MySQL 数据库并不支持。
不支持:
-
查看执行计划的命令
- 不支持使用
SHOW WARNINGS
显示额外的信息。
- 不支持使用