1 Star 0 Fork 0

OceanBase / tutorials-doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2.4-1-mysql-compatibility-of-oceanbase.md 5.98 KB
一键复制 编辑 原始数据 按行查看 历史
obdev 提交于 2022-09-19 14:36 . update

4.1 OceanBase 的 MySQL 兼容性简介

MySQL 兼容性主要和表的数据类型、业务 SQL 的兼容性有关。 MySQL 的函数、触发器、存储过程在 OceanBase 的 MySQL 模式中不能良好的支持,因此不推荐使用。所以本章数据迁移只包含数据库表对象及其数据的迁移。

支持的数据类型

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

  • 数值类型

  • 日期时间类型

  • 字符类型

  • 大对象类型

与 MySQL 数据库相比,OceanBase 数据库暂不支持空间数据类型和 JSON 数据类型,其他类别的数据类型中除大对象类型外,支持情况等于或大于 MySQL 数据库。

支持的 SQL 语法

此处仅列举常用的查询和修改 SQL。

  • SELECT

    支持通过如下方式查看执行计划:

    EXPLAIN <SQL Statement> \G
    
    EXPLAIN extended_noaddr <SQL Statement> \G
    
    EXPLAIN extended <SQL Statement> \G
  • INSERT

    • 支持单行、多行插入和指定分区插入

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

  • UPDATE

    • 支持单列和多列更新

    • 支持使用子查询

    • 支持集合更新

  • DELETE

    支持单表和多表删除

  • TRUNCATE

    支持完全清空指定表

支持的变量

MySQL 实例中的参数叫 variable。可以通过以下方式设置:

  • 启动时通过命令行设置

  • 在启动的配置文件中设置

  • SQL 命令行下设置

    • 全局级别

    • 会话级别

MySQL 的部分变量在 OceanBase 的 MySQL 租户中同样适用。但需注意源端 MySQL 和目标端 OceanBase 变量值的差异。

变量名 变量默认值(OceanBase) 变量含义
autocommit ON 是否自动提交。ON:表示每个 DML 之后会自动添加 commit 语句。OFF:表示不会自动 commit,需要用户主动 commit 或 rollback 事务。
auto_increment_cache_size 1000000 自增列的缓存值。自增列在节点重启发生切换后可能会跳号,该值越大,跳号间隔越大。
auto_increment_increment 1 自增列类型值的增长步长。
auto_increment_offset 1 自增列类型值的起始值。
character_set_client utf8mb4 连接的客户端环境的字符集。保持默认即可。
character_set_connection utf8mb4 连接自身的字符集。保持默认即可。
character_set_database utf8mb4 连接的数据库的字符集。保持默认即可。
collation_connection utf8mb4_general_ci 用于设置连接使用的字符集和字符序。
collation_database utf8mb4_general_ci 设置创建数据库默认字符集和字符序。
collation_server utf8mb4_general_ci 用于设置服务器默认字符集和字符序。
max_allowed_packet 4194304 需要调大,否则 SQL 文本或数据量很大时可能会报错。
sql_mode STRICT_ALL_TABLES 用于设置 SQL 模式,不同的 SQL 模式对于插入等行为有很大影响。
transaction_isolation READ-COMMITTED 用于设置事务的隔离级别。
tx_isolation READ-COMMITTED 用于设置事务隔离级别。
lower_case_table_names 1 1:表示自动将表名转小写,对于表名的大小写不敏感。0:表示不对表名大小写转换,对于表名的大小写敏感。
foreign_key_checks ON ON:检查外键约束。OFF:不检查外键约束。

这些变量中要留意字符集相关设置、sql_mode 设置以及 lower_case_table_names 设置。这些设置建议在数据迁移之前完成,后期修改会带来风险。

支持的字符集

OceanBase MySQL 租户支持字符集 binaryutf8mb4,默认字符集是 utf8mb4。字符集 utf8mb4utf8 的超集,比 utf8 多一些表情字符的编码。租户的字符集在租户创建时指定,是租户全局级别的字符集。

迁移数据到 OceanBase 时建议使用 utf8mb4 字符集。 在 utf8mb4 字符集下,每个英文字符长度为 1 字节,每个汉字长度为 3 字节,每个表情字符长度为 4 字节。如果迁移数据时更换了字符集,字符串列的长度需要适当增加。

MySQL [test]> create table t1(c1 varchar(50));
Query OK, 0 rows affected (0.04 sec)

MySQL [test]> insert into t1 values('a'),('中');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

MySQL [test]> select length(c1) from t1;
+------------+
| length(c1) |
+------------+
|          1 |
|          3 |
+------------+
2 rows in set (0.01 sec)

从 MySQL 中导出数据时,需确保数据库中的字符都能正确输出到文件中。通过 vim 命令下的 :set fileencoding 命令可以查看文件的编码,一般为 utf-8,这样通过文件迁移 MySQL 数据时不会出现乱码现象。

1
https://gitee.com/oceanbase/tutorials-doc.git
git@gitee.com:oceanbase/tutorials-doc.git
oceanbase
tutorials-doc
tutorials-doc
V1.0.0

搜索帮助