首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库中引号对表标识符的影响
更新时间:2026-05-21 01:56
Oracle 租户下,建表时如果用 "" 标识表名或者字段名(不能用 ' ' 标识),查询时也要加 "" 且严格区分大小写。
MySQL 租户下,建表时可以用 `` 标识表名或者字段名(不能用 "" 标识),查询时不需要区分大小写。
此行为表现与原生 MySQL 或者 Oracle 兼容。
在 Oracle 租户下
双引号用于标识对象名(如表名、字段名、字段别名),单引号用于表示字符串(与原生 ORACLE 兼容)。以下为详细描述。
标识符(即对象名)不加引号,此时 OBServer 默认将标识符名称转化为大写。
标识符(即对象名)加引号(只能使用双引号),此时 OBServer 将保留标识符的大小写。因此在引用命名时加了双引号的对象时,必须使用双引号且严格区分大小写。
注意:如果双引号内的字母均为大写,其效果与不加双引号一致。引用该类对象时可以不用双引号(不用双引号时不区分大小写)。
字符串用单引号表示(单引号不可以用于标识符)。
SQL 条件中不能直接引用本层级声明的字段别名,但可以通过子查询的方式使用字段别名。
等效的标识符(可以替换使用)。
"OCEANBASE" oceanbase OCEANBASE OceanBase
不等效的标识符(可以在同一命名空间内同时创建)。
"oceanbase" "OceanBase" "OCEANBASE"
标识符示例(以字段名为例)。
create table t_case("code" VARCHAR2(10), "NAME" VARCHAR2(10));
标识符使用符合规则的 SQL。
SELECT "code" FROM t_case;
SELECT NAME FROM t_case;
SELECT name FROM t_case;
SELECT "NAME" FROM t_case;
SELECT * FROM t_case "T" where t.name<>'a'; -- 表别名使用符合规则
SELECT * FROM t_case "t" where "t".name<>'a'; -- 表别名使用符合规则
SELECT "NAME" nm FROM t_case; -- 字段别名符合规则
SELECT "NAME" "nm" FROM t_case; -- 字段别名符合规则
select * from (SELECT "NAME" "nm" FROM t_case) where "nm"<>'a'; -- 字段别名符合规则
标识符使用不符合规则的 SQL。
SELCT code FROM t_case;
SELCT "CODE" FROM t_case;
SELCT CODE FROM t_case;
SELECT "NAME" 'nm' FROM t_case; -- 字段别名不符合规则,不能使用''
SELECT "NAME" nm FROM t_case where nm<>'a';; -- 字段别名使用不符合规则,where条件中不能直接引用字段别名
在 MySQL 租户下
反引号用于标识对象名(如表名、字段名),单引号、双引号用于表示字符串(与原生 MySQL 兼容)。以下为详细描述。
- 标识符(即对象名)可以加或者不加引号(只能使用反引号)的效果相等,都不影响其存储标识符名称的规则:表名默认转化为小写,字段名保留原大小写。引用该对象时加不加引号或者大小写不一致都可。
- 单引号、双引号用于标识字符串。
- 表的别名与标识符规则一致;字段的别名命名时既可以当作标识符,也可以当作字符串,但在引用时只适用字符串的规则。
等效的标识符(可以替换使用)。
`OCEANBASE` `OceanBase` oceanbase OCEANBASE OceanBase
等效的字符串。
"oceanbase" 'oceanbase'
标识符与字符串规则示例(以字段名为例)。
create table test (col_test1 int,`col_TEST2` varchar(50));
标识符使用符合规则的 SQL。
SELECT `col_TesT1`, col_test2 FROM test;
表别名使用符合规则的 SQL。
SELECT * FROM test t where `t`.col_test2<>'a';
SELECT * FROM test `T` where t.col_test2<>"a";
表别名使用不符合规则的 SQL。
SELECT * FROM test 't' WHERE 't'.col_test1<>1;
SELECT * FROM test "t" WHERE "t".col_test1<>1;
字段别名使用符合规则的 SQL。
SELECT col_test2 `ct` FROM test;
SELECT col_test2 ct FROM test;
SELECT col_test2 'ct' FROM test where "ct"<>"a";-- 前一个 ct 为字段别名命名,后一个 ct 为字段别名使用
SELECT col_test2 "ct" FROM test where 'ct'<>"a";
SELECT col_test2 `ct` FROM test where 'ct'<>"a";
字段别名使用不符合规则的 SQL(主要为引用阶段)。
SELECT col_test2 ct FROM test where ct<>"a";
SELECT col_test2 `ct` FROM test where `ct`<>"a";
更多信息
在 ORACLE 租户中,数据库名称、全局数据库名称和数据库链接名称始终不区分大小写并以大写形式存储。如果将此类名称指定为带引号的标识符,则引号将被静默忽略。
适用版本
OceanBase 数据库所有版本。