字元類型 - Amazon Redshift

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

字元類型

字元資料類型包括 CHAR (字元) 和 VARCHAR (可變長度字元)。

儲存與範圍

CHAR 和 VARCHAR 資料類型是以字元組而非字元來定義。CHAR 資料欄只能包含單位元組字元,因此 CHAR(10) 資料欄可包含最大長度為 10 位元組的字串。VARCHAR 可包含多位元組字元,每個字元最多 4 個位元組。例如,VARCHAR(12) 資料欄可包含 12 個單位元組的字元、6 個 2 位元組的字元、4 個 3 位元組的字元,或是 3 個 4 位元組的字元。

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

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

create table test(col1 varchar(max));

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

CHAR 或 CHARACTER

使用 CHAR 或 CHARACTER 資料欄來儲存固定長度的字串。這些字串會用空格填充,因此 CHAR(10) 資料欄一律會佔 10 個位元組的儲存空間。

char(10)

未指定長度規格的 CHAR 資料欄,會變成 CHAR(1) 資料欄。

VARCHAR 或 CHARACTER VARYING

使用 VARCHAR 或 CHARACTER VARYING 資料欄,來儲存具有固定限制的可變長度字串。這些字串並未使用空格填充,因此,VARCHAR(120) 資料欄最多可包含 120 個單位元組的字元、60 個 2 位元組的字元、40 個 3 位元組的字元,或是 30 個 4 位元組的字元。

varchar(120)

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

NCHAR 與 NVARCHAR 類型

您可以建立具有 NCHAR 和 NVARCHAR 類型的資料欄 (也稱為 NATIONAL CHARACTER 和 NATIONAL CHARACTER VARYING 類型)。這些類型會分別轉換為 CHAR 和 VARCHAR 類型,然後以指定的位元組數目儲存。

未指定長度規格的 NCHAR 資料欄,會轉換為 CHAR(1) 資料欄。

未指定長度規格的 NVARCHAR 資料欄,會轉換為 VARCHAR(256) 資料欄。

TEXT 與 BPCHAR 類型

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

您可以建立具備 BPCHAR (空格填充字元) 類型的亞馬遜 Redshift 資料欄,Amazon Redshift 會轉換為固定長度的 CHAR (256) 資料欄。

多餘空格的意義

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

CHAR 值中的多餘空格在語義上一律不具有意義。這些空格會在您比較兩個 CHAR 值時被忽略、不列入 LENGTH 的計算中,而且會在您將 CHAR 值轉換為另一種字串類型時移除。

在比較值時,VARCHAR 和 CHAR 值中的多餘空格,在語義上會視為不具意義。

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