本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
名稱與識別碼
名稱可用來識別資料庫物件,包括資料表和資料欄,以及使用者和密碼。名稱和識別碼這兩個詞可互換使用。識別碼有兩種:標準識別碼和引號 (或區隔) 識別碼。識別碼必須只能包含 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。
系統欄名稱
下列 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)
下列的 CREATE TABLE 命令會建立資料欄名稱中有一條斜線的資料表:
create table if not exists city_slash_id( "city/id" integer not null, state char(2) not null);