名稱與識別碼 - Amazon Redshift

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

名稱與識別碼

名稱可用來識別資料庫物件,包括資料表和資料欄,以及使用者和密碼。名稱識別碼這兩個詞可互換使用。識別碼有兩種:標準識別碼和引號 (或區隔) 識別碼。標識符只能由 UTF -8 個可打印字符組成。ASCII標準和分隔標識符中的字母不區分大小寫,並在數據庫中折疊為小寫。在查詢結果中,欄的名稱預設會以小寫傳回。若要以大寫傳回欄的名稱,請將 describe_field_name_in_uppercase 組態參數設定為 true

標準識別碼

標準SQL識別碼遵守一組規則,且必須:

  • 以ASCII單位元組字母字元或底線字元開頭,或長度為 UTF -8 個多位元組字元,長度為 2 到 4 個位元組。

  • 後續字元可以是ASCII單位元組字母數字字元、底線或美元符號,或 UTF -8 個多位元組字元長度為 2 到 4 個位元組。

  • 讓長度介於 1 到 127 個位元組之間,不包括區隔識別碼的引號。

  • 不包含引號和空格。

  • 不是保留的SQL關鍵字。

區隔識別碼

區隔識別碼 (也稱為引號識別碼) 是以雙引號 (") 開頭和結尾。如果使用區隔識別碼,則每次參考該物件,都必須使用雙引號。標識符可以包含除雙引號本身以外的任何標準 UTF -8 個可打印字符。因此,您可以建立欄或資料表的名稱,其中包含無效字元,例如空格或百分比符號。

ASCII分隔標識符中的字母不區分大小寫,並折疊成小寫。若要在字串中使用雙引號,必須在其前面加上另一個雙引號字元。

區分大小寫的識別碼

區分大小寫的識別碼 (也稱為混合大小寫識別碼) 可以同時包含大寫和小寫字母。若要使用區分大小寫的識別碼,您可以將組態 enable_case_sensitive_identifier 設定為 true。您可以為叢集或工作階段設定此組態。如需詳細資訊,請參閱《Amazon Redshift 管理指南》中的預設參數值enable_case_sensitive_identifier

系統欄名稱

下列 Postgre SQL 系統欄名稱不能用作使用者定義欄中的欄名稱。如需詳細資訊,請參閱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);