OceanBase与 MySQL 兼容性对比

OceanBase 数据库的 MySQL 模式兼容 MySQL 5.7/8.0 的绝大部分功能和语法。由于产品架构不同,或者客户需求不大,有些功能并没有被支持。本节主要从以下几方面介绍 OceanBase 数据库的 MySQL 模式与原生 MySQL 数据库的不同:

  • 数据类型

  • SQL 语法

  • 过程性语言

  • 系统视图

  • 字符集

  • 字符序

  • 函数与表达式

  • 分区支持

  • 备份恢复

  • 存储引擎

  • 优化器

数据类型

OceanBase 数据库支持的数据类型有:

  • 数值类型

    • 整数类型:BOOL/BOOLEAN/TINYINTSMALLINTMEDIUMINTINT/INTEGER 和 BIGINT

    • 定点类型:DECIMAL 和 NUMERIC

    • 浮点类型:FLOAT 和 DOUBLE

    • Bit-Value 类型:BIT

  • 日期时间类型:DATETIMETIMESTAMPDATETIME 和 YEAR

  • 字符类型:CHARVARCHARBINARY 和 VARBINARY

  • 大对象类型:TINYBLOBBLOBMEDIUMBLOB 和 LONGBLOB

  • 文本类型:TINYTEXTTEXTMEDIUMTEXTLONGTEXT 和 STRING

    说明

    对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持文本数据类型 STRING

  • 枚举类型:ENUM

  • 集合类型:SET

  • JSON 数据类型

  • 空间数据类型

  • 高效压缩位图数据类型

  • 数组数据类型

  • 向量数据类型

SQL 语法

支持:

SELECT

  • 支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内联接、半联接以及外联接;支持分组、聚合;支持常见的概率、线性回归等数据挖掘函数等。

  • 支持对多个 SELECT 查询的结果进行 UNIONUNION ALLMINUSEXCEPT 或 INTERSECT 等集合操作。

  • 支持使用 EXPLAIN 语法查看执行计划。

INSERT

  • 支持单行和多行插入数据,同时支持指定分区插入数据。

  • 支持 INSERT INTO ... SELECT ... 语句。

UPDATE

  • 支持单列和多列更新数据。

  • 支持使用子查询更新数据。

  • 支持集合更新数据。

DELETE

  • 支持单表和多表删除。

TRUNCATE

  • 支持完全清空指定表。

不支持:

SELECT

  • 不支持 SELECT ... FOR SHARE ... 语法。

TRUNCATE

  • 不支持在进行事务处理和表锁定的过程中操作。

过程性语言

OceanBase 数据库兼容了大部分 MySQL 数据库的 PL 功能,主要支持的 PL 功能如下:

  • 数据类型
  • 存储过程
  • 自定义函数
  • 触发器
  • 异常处理

此外,OceanBase 数据库特有的 MySQL PL 系统包,包括 DBMS_RESOURCE_MANAGERDBMS_STATSDBMS_UDRDBMS_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 版本开始支持字符集:gb2312ujiseuckreucjpmscp932cp850hp8macroman 和 swe7

字符序

OceanBase 数据库支持的字符序如下表所示。

字符序所属字符集说明
utf8mb4_general_ciutf8mb4使用通用排序规则。
utf8mb4_binutf8mb4使用二进制排序规则。
utf8mb4_unicode_ciutf8mb4使用基于 Unicode Collation Algorithm (UCA) 的排序规则。
utf8mb4_unicode_520_ciutf8mb4使用 Unicode 5.2.0 版本的排序规则。它遵循 Unicode 码点排序,并忽略字符的大小写差异。
utf8mb4_croatian_ciutf8mb4使用克罗地亚文(Croatian)的排序规则。utf8mb4_croatian_ci 兼容 utf8_croatian_ci
utf8mb4_czech_ciutf8mb4使用捷克文(Czech)的排序规则。
utf8mb4_0900_ai_ciutf8mb4使用 Unicode 9.0.0 版本的字符排序规则和顺序,同时忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。
binarybinary使用二进制排序规则。
gbk_chinese_cigbk使用中文语言排序规则。
gbk_bingbk使用二进制排序规则。
utf16_general_ciutf16使用通用排序规则。
utf16_binutf16使用二进制排序规则。
utf16_unicode_ciutf16使用基于 Unicode Collation Algorithm (UCA) 的排序规则。
utf8mb4_german2_ciutf16le使用德语排序规则。
utf8mb4_croatian_ciutf16le使用克罗地亚语排序规则。
gb18030_chinese_cigb18030使用中文语言排序规则。
gb18030_bingb18030使用二进制排序规则。
latin1_swedish_cilatin1使用瑞典语/芬兰语排序规则。
latin1_german1_cilatin1用于德国(German)语言环境下的 latin1 字符集的排序规则。
latin1_danish_cilatin1用于丹麦(Danish)语言环境下的 latin1 字符集的排序规则。
latin1_german2_cilatin1用于德语环境,适用于需要按照字典顺序进行字符比较的应用场景。
latin1_general_cilatin1用于需要不区分大小写且支持重音符号的场景,如某些欧洲语言的数据库设计。
latin1_general_cslatin1用于区分大小写的通用排序规则,支持多种语言(如西欧语言)。
latin1_spanish_cilatin1用于西班牙(Spanish)语言环境的排序规则。
latin1_binlatin1latin1 使用二进制排序规则。
gb18030_2022_bingb18030_2022使用二进制排序规则。
gb18030_2022_chinese_cigb18030_2022使用拼音排序规则。不区分大小写。MySQL 模式下该字符集的默认字符序。
gb18030_2022_chinese_csgb18030_2022使用拼音排序规则。区分大小写。
gb18030_2022_radical_cigb18030_2022使用部首笔画排序规则。不区分大小写。
gb18030_2022_radical_csgb18030_2022使用部首笔画排序规则。区分大小写。
gb18030_2022_stroke_cigb18030_2022使用笔画排序规则。不区分大小写。
gb18030_2022_stroke_csgb18030_2022使用笔画排序规则。区分大小写。
ascii_binascii使用二进制排序规则。
ascii_general_ciascii使用基于字母的不区分大小写的排序规则。它忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。
tis620_bintis620使用二进制排序规则。
tis620_thai_citis620使用泰语排序规则,不区分大小写。
sjis_japanese_cisjis使用日语排序规则。
dec8_swedish_cidec8使用瑞典语排序规则。
gb2312_chinese_cigb2312使用 GB2312 字符集,按照中文排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

gb2312_bingb2312使用 GB2312 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

ujis_japanese_ciujis使用 UJIS 字符集,按照日语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

ujis_binujis使用 UJIS 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

euckr_korean_cieuckr使用 EUCKR 字符集,按照韩语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

euckr_bineuckr使用 EUCKR 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

eucjpms_japanese_cieucjpms使用 EUCJPMS 字符集,按照日语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

eucjpms_bineucjpms使用 EUCJPMS 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp932_japanese_cicp932使用 CP932 字符集,按照日语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp932_bincp932使用 CP932 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp850_general_cicp850使用 CP850 字符集,按照通用排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp850_bincp850使用 CP850 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

hp8_english_cihp8使用 HP8 字符集,按照英语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

hp8_binhp8使用 HP8 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

macroman_general_cimacroman使用 MacRoman 字符集,按照通用排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

macroman_binmacroman使用 MacRoman 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

swe7_swedish_ciswe7使用 SWE7 字符集,按照瑞典语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

swe7_binswe7使用 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 调优指南

支持:

  • 查看执行计划的命令

    • 输出的列信息仅包含 IDOPERATORNAMEEST. 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 显示额外的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值