名稱與識別碼 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

名稱與識別碼

名稱可用來識別資料庫物件,包括資料表和資料欄,以及使用者和密碼。名稱識別碼這兩個詞可互換使用。識別碼有兩種:標準識別碼和引號 (或區隔) 識別碼。識別符只能包含 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);