SQL 标识符
SQL 标识符是数据库对象的名称。
像 table
(表)、 view
(视图)、 database
(数据库)这些常见的对象都是SQL 标识符:
要求
不带引号的对象标识符:
以 Unicode 字母(
A
-Z
、a
-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 | |
+-------+------+------+---------+-------+