字元類型 - Amazon Redshift

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

字元類型

字符數據類型包括CHAR(字符)和VARCHAR(字符不同)。

儲存與範圍

CHAR和VARCHAR數據類型是以字節而不是字符定義的。CHAR資料行只能包含單一位元組字元,因此 CHAR (10) 資料行可以包含長度上限為 10 個位元組的字串。A VARCHAR 可以包含多位元組字元,每個字元最多可包含四個位元組。例如,VARCHAR(12) 資料行可以包含 12 個單一位元組字元、6 個雙位元組字元、4 個三位元組字元或 3 個四位元組字元。

名稱 儲存 範圍 (資料欄的寬度)
CHAR,CHARACTER或 NCHAR 字串的長度,包括多餘的空格 (如果有的話) 4096 位元組
VARCHAR、CHARACTERVARYING、或 NVARCHAR 4 位元組 + 字元的總位元組數,其中每個字元都可以是 1 到 4 個位元組。 65535 位元組 (64K -1)
BPCHAR 轉換為固定長度 CHAR (256)。 256 位元組
TEXT 已轉換為 VARCHAR (256)。 260 位元組
注意

CREATETABLE語法支援字元資料類型的MAX關鍵字。例如:

create table test(col1 varchar(max));

此MAX設定會將資料行的寬度定義為 4096 個位元組,CHAR或將資料行的寬度定義為 65535 個位元組。VARCHAR

CHAR或 CHARACTER

使用CHAR或CHARACTER列來存儲固定長度的字符串。這些字符串用空格填充,因此CHAR(10)列總是佔用 10 個字節的存儲空間。

char(10)

沒有長度規格的CHAR欄會產生 CHAR (1) 欄。

VARCHAR或 CHARACTER VARYING

使用VARCHAR或CHARACTERVARYING欄來儲存具有固定限制的可變長度字串。這些字串不會以空白填充,因此 VARCHAR (120) 資料欄最多包含 120 個單位元組字元、60 個雙位元組字元、40 個三位元組字元或 30 個四位元組字元。

varchar(120)

如果您在陳述式中使用不含長度說CREATETABLE明字的VARCHAR資料類型,則預設長度為 256。如果在運算式中使用,系統會使用輸入運算式來確定輸出的大小 (最多 65535)。

NCHAR和NVARCHAR類型

您可以使用NCHAR和NVARCHAR類型 (也稱為NATIONALCHARACTER和NATIONALCHARACTERVARYING類型) 建立欄。這些類型分別轉換為CHAR和VARCHAR類型,並存儲在指定的字節數。

沒有長度規格的NCHAR列被轉換為CHAR(1)列。

沒有長度規格的NVARCHAR資料行會轉換為 VARCHAR (256) 資料行。

TEXT和BPCHAR類型

您可以建立具有TEXT資料欄的 Amazon Redshift 表格,但會轉換為 VARCHAR (256) 個資料欄,該資料行可接受變數長度值 (最多 256 個字元)。

您可以建立一個具有 BPCHAR (空白填充字元) 類型的 Amazon Redshift 資料欄,而 Amazon Redshift 會將其轉換為固定長度 CHAR (256) 資料欄。

多餘空格的意義

CHAR和VARCHAR數據類型都存儲長度最多為 n 個字節的字符串。如果試圖將較長的字串,儲存到具有這些類型的資料欄中,將會造成錯誤 (除非多出來的字串全部都是空格 (空白),此時字串會被截斷至最大長度)。如果字串短於最大長度,CHAR值會以空白填充,但VARCHAR值會儲存不含空格的字串。

CHAR值中的尾隨空格始終在語義上微不足道。當您比較兩個CHAR值 (不包括在LENGTH計算中) 時,它們會被忽略,並在將CHAR值轉換為另一個字串類型時移除它們。

比較值時,VARCHAR和CHAR值中的尾隨空格會被視為語義上微不足道。

長度計算會傳回長度中包含尾隨空格的字VARCHAR元字串長度。多餘的空格不會列入固定長度字元字串的長度計算。