在 OceanBase 数据库中创建 MySQL 模式的租户后,查询字符集可能会不符合预期。本文介绍出现该问题的原因和解决方法。
适用版本
OceanBase 数据库 V2.2.30-BP10 以前的版本。
问题现象
使用 sys 租户创建 MySQL 模式的租户(本示例中,租户名称为 test_tenant),查询该用户的 collation_type.character_set_database,结果为 63 ,表示 binary,结果符合预期。
obclient> CREATE TENANT test_tenant RESOURCE_POOL_LIST=('pool1'),charset='binary' set ob_compatibility_mode='mysql' SELECT tenant_name, collation_type FROM gv$tenant WHERE tenant_name='test_tenant';
obclient> SELECT tenant_name, collation_type FROM gv$tenant WHERE tenant_name='test_tenant';
+-------------+----------------+
| tenant_name | collation_type |
+-------------+----------------+
| test_tenant | 63 |
+-------------+----------------+
登录 test_tenant 租户,查询 collation_type.character_set_database,结果为 utf8mb4,不符合预期。
obclient> SHOW variables LIKE 'character_set_database';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+|
character_set_database | utf8mb4 |
+------------------------+---------+
可能原因
可能是由于建立新的 MySQL 模式租户后,没有设置服务器和数据库级别的字符集。
说明
character_set_database:默认创建 database 时使用的字符集。MySQL 8.0 版本不再使用,并将其设置为 read_only。OceanBase 数据库兼容 MySQL 5.6 版本,保留了该配置。character_set_server:如果创建 database 的时候没有指定 charset,则会使用character_set_server。
有关以上两个系统变量的详细信息,参见《OceanBase 数据库 参考指南》中 系统变量 章节。
解决方式
将 OceanBase 数据库升级到 V2.2.30-BP10 以后的版本。有关升级 OceanBase 数据库的方法,请参见《OceanBase 数据库 升级指南》。