MySQL 兼容性主要看表的数据类型、业务 SQL 的兼容性。 MySQL 的函数、触发器、存储过程 在 OceanBase MySQL 里支持的并不好,也不推荐用。所以本章数据迁移就只包含数据库表对象及其数据的迁移。
支持的数据类型
OceanBase 数据库支持的数据类型有:
- 数值类型
- 日期时间类型
- 字符类型
- 大对象类型
与 MySQL 数据库对比,OceanBase 数据库暂不支持空间数据类型和 JSON 数据类型,其他类别的数据类型除了大对象外,支持情况是等于或大于 MySQL 数据库的。
支持的SQL 语法
常用的 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 命令行下设置。SQL 里设置又分为全局级别设置和会话级别设置。
MySQL 有些变量在 OceanBase MySQL 租户里同样适用,但是要留心源端 MySQL 和目标端 OceanBase 这些变量值的差异。
这些变量中要留意字符集相关设置、sql_mode
设置以及 lower_case_table_names
设置。这些设置最好是在数据迁移之前就正确设置。后期修改会带来风险。
支持的字符集
OceanBase MySQL 租户支持字符集 binary
和 utf8mb4
。 默认是后者。租户的字符集在租户创建的时候指定,设置的是租户全局级别的字符集。 字符集 utf8mb4
是 utf8
的超集,多一些表情字符的编码。建议迁移到 OceanBase 都使用这个字符集。 在 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 数据时就不会出现乱码现象。
附录:
- 4.1 OceanBase 的 MySQL 兼容性简介
- 4.2 如何使用 mysqldump 迁移 MySQL 表 OceanBase
- 4.3 如何使用 dbcat 迁移 MySQL 表结构到 OceanBase
- 4.4 如何把 MySQL 表数据导出到 CSV 文件
- 4.5 如何使用 OceanBase 的 LOAD 命令加载 csv 数据文件 OceanBase
- 4.6 如何使用 DataX 加载 CSV 数据文件到 OceanBase
- 4.7 如何使用 DATAX 迁移 MySQL数据到 OceanBase
- 4.8 如何使用 OBDUMPER / OBLOADER 工具导出/导入 OceanBase 数据
- 4.9 如何使用 DATAX 迁移 OceanBase 数据到 MySQL/ORACLE
- 4.10 如何使用 CANAL 将 MySQL 数据实时同步到 OceanBase
结束语
加入教程直播群方式一:钉钉群号3255 4020
加入教程直播群方式二:扫码下方二维码加入