暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实战教程第四章4.1:OceanBase 的 MySQL 兼容性简介

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 数据时就不会出现乱码现象。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论