跳转到主要内容

SQL 标识符

SQL 标识符是数据库对象的名称。

table(表)、 view(视图)、 database (数据库)这些常见的对象都是SQL 标识符:

要求

不带引号的对象标识符:

  • 以 Unicode 字母(A - Za - z)或下划线(_)开头。 其后的字符只能是字母、下划线、数字(0 - 9)或美元符号($)。

  • 默认情况下,这类标识符会被储存并解析为小写字符(例如 ID 被储存并解析为 id)。

带双引号的对象标识符:

  • 这类标识符可以包含,甚至可以从空白符(码值 32)到波浪号(码值 126)的任一 ASCII 字符开始。

  • 默认情况下,在存储和解析这类标识符时会保留标识符的大小写(例如 "Id" 被存储和解析为 Id)。

Examples:

databend :) create table " with""TestQuote""" (id int);

databend :) desc ` with""TestQuote""`;
+-------+------+------+---------+-------+
| Field | Type | Null | Default | Extra |
+-------+------+------+---------+-------+
| id | INT | NO | 0 | |
+-------+------+------+---------+-------+

不带引号的标识符

如果某个标识符没有使用双引号括起来,那么它必须以字母或下划线(_)开头,且不能包含扩展字符或空格。

下面给出一些有效标识符的示例;但是,在默认情况下,这些标识符中的大小写将不予保留:

myidentifier
MyIdentifier1
My$identifier
_my_identifier

带双引号的标识符

默认情况下,带双引号的标识符是区分大小写的,且可以以任何有效字符开头,包括:

  • 数字

  • 特殊字符(.'!@#$%^&* 等)

  • 扩展 ASCII 和 非 ASCII 字符

  • 空格

"MyIdentifier"
"my.identifier"
"my identifier"
"My 'Identifier'"
"3rd_identifier"
"$Identifier"
"идентификатор"

解析度

默认情况下,Databend 应用以下规则存储(在创建/定义时)和解析(查询和其他 SQL 语句)这些标识符:

  • 当标识符未加引号时,它将以小写形式存储和解析。

  • 当标识符被双引号括住时,它将按照输入的内容(包括大小写)进行存储和解析。

在使用 不带引号的标识符 时,如果想要保留字符的大小写,需要设置 unquoted_ident_case_sensitive = 1 。

Examples:

databend :) set unquoted_ident_case_sensitive=1;

databend :) create table Tt(id int);

databend :) desc Tt;
+-------+------+------+---------+-------+
| Field | Type | Null | Default | Extra |
+-------+------+------+---------+-------+
| id | INT | NO | 0 | |
+-------+------+------+---------+-------+

databend :) create table tt(id1 int);
Query OK, 0 rows affected (0.08 sec)

databend :) desc tt;
+-------+------+------+---------+-------+
| Field | Type | Null | Default | Extra |
+-------+------+------+---------+-------+
| id1 | INT | NO | 0 | |
+-------+------+------+---------+-------+

在使用 带双引号的标识符 时不想保留字符的大小写,需要设置 quoted_ident_case_sensitive = 0 。

Examples:

databend :) set quoted_ident_case_sensitive=0;
Query OK, 0 rows affected (0.03 sec)

databend :) create table "Test"(id int);
Query OK, 0 rows affected (0.06 sec)

databend :) desc Test;
+-------+------+------+---------+-------+
| Field | Type | Null | Default | Extra |
+-------+------+------+---------+-------+
| id | INT | NO | 0 | |
+-------+------+------+---------+-------+

databend :) desc test;
+-------+------+------+---------+-------+
| Field | Type | Null | Default | Extra |
+-------+------+------+---------+-------+
| id | INT | NO | 0 | |
+-------+------+------+---------+-------+