基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
OceanBase 数据库 MySQL 租户对象大小写默认值
更新时间:2026-05-26 02:31
本文主要介绍 OceanBase 数据库 MySQL 租户对象大小写区分参数默认值设置。
MySQL 租户的大小写规则
OceanBase 数据库 MySQL 租户中,数据库对象的名称可分为以下三类:
| 类别 | 大小写区分规则 |
|---|---|
| 表名、数据库名、表的别名 | 大小写和比较方式受系统变量 lower_case_table_names 的影响。 默认情况下,业务租户的 lower_case_table_names=1,表示不区分大小写。 |
| 列名索引名列的别名 | 在内部持久化的时候存储为原始形式,比较时大小写不敏感 |
| 其他未列出数据库对象的名称 | 在内部持久化的时候存储为原始形式,比较时大小写敏感 |
其中 lower_case_table_names 取值的含义如下表所示。
| 值 | 含义 |
|---|---|
| 0 | * 表名和数据库名持久化内容为 CREATE TABLE 或 CREATE DATABASE 语句中的原始名。 * 表名和数据库名以及表的别名比较时大小写敏感。 |
| 1 | 表名和数据库名在存储前先转换为小写,表名数据库名包括表的别名在比较之前也会转换为小写。 |
| 2 | * 表名和数据库名持久化内容为 CREATE TABLE 或 CREATE DATABASE 语句中的原始名。 * 表名和数据库名以及表的别名大小写不敏感。 * 该取值只适用于大小写不敏感的文件系统。InnoDB 的表比较特殊,表名持久化之前会转成小写存储的。 |
注意
OceanBase 数据库目前不支持修改 `lower_case_table_names`,该参数为只读参数,只能在创建租户时配置。
进行数据迁移时,如果 MySQL 数据库中默认使用区分大小写,创建了驼峰标识的表名,在不区分大小写的模式下可以正常查询表,但建议业务应用侧代码中对表名统一规范化小写方式。
验证方式
测试默认情况下,sys 租户与业务租户的大小写区分情况,以及验证 lower_case_table_names 是否可以修改。
首先测试 OceanBase 数据库 MySQL 租户的大小写区分情况。
创建大小写混合库名数据库 Abc,并测试大小写区分情况。
obclient> CREATE DATABASE Abc; Query OK, 1 row affected (0.08 sec) obclient> SHOW DATABASEs; +--------------------+ | Database | +--------------------+ | oceanbase | | information_schema | | SYS | | LBACSYS | | test | | Abc | +--------------------+ 6 rows in set (0.00 sec)创建大小写混合表名 Abc,并测试大小写区分情况。
obclient> CREATE TABLE Abc(t1 INTEGER PRIMARY KEY,t2 INTEGER); Query OK, 0 rows affected (0.12 sec) obclient> SHOW TABLES; +----------------+ | Tables_in_test | +----------------+ | Abc | +----------------+ 1 row in set (0.00 sec)创建字段名为大写的测试表,并测试大小写区分情况。
obclient> CREATE TABLE Abc(t1 INTEGER PRIMARY KEY,T2 INTEGER); Query OK, 0 rows affected (0.03 sec) obclient> SHOW CREATE TABLE Abc\G *************************** 1. row *************************** Table: Abc Create Table: CREATE TABLE `Abc` ( `t1` int(11) NOT NULL, `T2` int(11) DEFAULT NULL, PRIMARY KEY (`t1`) ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.0' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 1 row in set (0.00 sec)
连接系统租户与普通租户查询默认参数设置。
SHOW GLOBAL variables LIKE 'lower_case_table_names';sys 租户查询结果如下。
obclient> SHOW GLOBAL variables LIKE 'lower_case_table_names'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_table_names | 2 | +------------------------+-------+ 1 row in set (0.01 sec)普通租户查询结果如下。
obclient> SHOW GLOBAL variables LIKE 'lower_case_table_names'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_table_names | 1 | +------------------------+-------+ 1 row in set (0.01 sec)
目前,OceanBase 数据库 sys 租户的
lower_case_table_names的默认值为 2,MySQL 模式普通租户的lower_case_table_names的默认值为 1。因此 sys 租户与业务租户在大小写区分上有一定区别。
尝试在系统租户下修改普通账户
lower_case_table_names设置。sys 租户修改普通租户参数。
显示未知系统配置,表示不支持修改。
obclient> ALTER SYSTEM SET lower_case_table_names=0 TENANT ='xxxxxx'; ERROR 5099 (42000): System config unknown在 sys 租户中修改 GLOBAL 或 SESSION 级别的参数。
返回
Variable 'lower_case_table_names' is a read only variable,表示lower_case_table_names参数为只读参数,不支持修改。SET GLOBAL lower_case_table_names=0; ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable SET SESSION lower_case_table_names=0; ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable