本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
名稱與識別碼
名稱可用來識別資料庫物件,包括資料表和資料欄,以及使用者和密碼。名稱和識別碼這兩個詞可互換使用。識別碼有兩種:標準識別碼和引號 (或區隔) 識別碼。識別符只能包含 UTF-8 個可列印字元。ASCII 標準和分隔識別碼中的字母不區分大小寫,且在資料庫中折疊為小寫。在查詢結果中,欄的名稱預設會以小寫傳回。若要以大寫傳回欄的名稱,請將 describe_field_name_in_uppercase 組態參數設定為 true
。
標準識別碼
標準SQL識別碼遵循一組規則,且必須:
-
從ASCII單位元組字母字元或底線字元,或長度為兩到四個位元組的 UTF-8 個多位元組字元開始。
-
後續字元可以是ASCII單位元組英數字元、底線或美元符號,或長度為兩到四個位元組的 UTF-8 個多位元組字元。
-
讓長度介於 1 到 127 個位元組之間,不包括區隔識別碼的引號。
-
不包含引號和空格。
-
不是保留SQL的關鍵字。
區隔識別碼
區隔識別碼 (也稱為引號識別碼) 是以雙引號 (") 開頭和結尾。如果使用區隔識別碼,則每次參考該物件,都必須使用雙引號。識別符可以包含雙引號本身以外的任何標準 UTF-8 個可列印字元。因此,您可以建立欄或資料表的名稱,其中包含無效字元,例如空格或百分比符號。
ASCII 分隔識別碼中的字母不區分大小寫,並摺疊為小寫。若要在字串中使用雙引號,必須在其前面加上另一個雙引號字元。
區分大小寫的識別碼
區分大小寫的識別碼 (也稱為混合大小寫識別碼) 可以同時包含大寫和小寫字母。若要使用區分大小寫的識別碼,您可以將組態 enable_case_sensitive_identifier
設定為 true
。您可以為叢集或工作階段設定此組態。如需詳細資訊,請參閱《Amazon Redshift 管理指南》中的預設參數值和enable_case_sensitive_identifier。
系統欄名稱
下列 PostgreSQL 系統資料欄名稱無法用作使用者定義資料欄中的資料欄名稱。如需詳細資訊,請參閱 https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html
oid
tableoid
xmin
cmin
xmax
cmax
ctid
範例
下表顯示區隔識別碼的範例、產生的輸出和說明:
語法 | 結果 | 說明 |
---|---|---|
"group" | 群組 | GROUP 是保留單字,因此在識別符內使用該單字需要雙引號。 |
"""WHERE""" | "where" | WHERE 也是保留字。若要在字串中包含雙引號,請使用額外的雙引號字元,來逸出每個雙引號字元。 |
"This name" | this name | 必須使用雙引號來保留空格。 |
"This ""IS IT""" | this "is it" | 包夾 IS IT 的引號,前後必須再加上另一個引號,才能成為名稱的一部分。 |
若要建立名為 group 的資料表,而且此資料表包含名為 this "is it" 的欄:
create table "group" ( "This ""IS IT""" char(10));
下列的查詢會傳回相同的結果:
select "This ""IS IT""" from "group"; this "is it" -------------- (0 rows)
select "this ""is it""" from "group"; this "is it" -------------- (0 rows)
下列的完整 table.column
語法,也會傳回相同的結果:
select "group"."this ""is it""" from "group"; this "is it" -------------- (0 rows)
下列CREATETABLE命令會建立資料欄名稱中具有斜線的資料表:
create table if not exists city_slash_id( "city/id" integer not null, state char(2) not null);