

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 字元類型
<a name="r_Character_types"></a>

**Topics**
+ [儲存與範圍](#r_Character_types-storage-and-ranges)
+ [CHAR 或 CHARACTER](#r_Character_types-char-or-character)
+ [VARCHAR 或 CHARACTER VARYING](#r_Character_types-varchar-or-character-varying)
+ [NCHAR 與 NVARCHAR 類型](#r_Character_types-nchar-and-nvarchar-types)
+ [TEXT 與 BPCHAR 類型](#r_Character_types-text-and-bpchar-types)
+ [多餘空格的意義](#r_Character_types-significance-of-trailing-blanks)
+ [字元類型範例](r_Examples_with_character_types.md)

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

## 儲存與範圍
<a name="r_Character_types-storage-and-ranges"></a>

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));
```
對於 CHAR，MAX 將資料欄寬度定義為 4096 個位元組。  
對於 VARCHAR，MAX 在 CREATE TABLE 陳述式中將資料欄寬度定義為 65，535 個位元組。對於記憶體內操作，VARCHAR(MAX) 最多支援 16，000，000 個位元組。

## CHAR 或 CHARACTER
<a name="r_Character_types-char-or-character"></a>

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

```
char(10)
```

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

## VARCHAR 或 CHARACTER VARYING
<a name="r_Character_types-varchar-or-character-varying"></a>

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

```
varchar(120)
```

如果您在建立資料表陳述式中使用沒有長度說明符的 VARCHAR 資料類型，預設長度為 256。

[字串函數](String_functions_header.md) 現在支援最多 16，000，000 個位元組。例如，CONCAT 函數輸出先前限制為 65535 個位元組，但現在支援最多 16，000，000 個位元組。

```
SELECT LEN(CONCAT(REPEAT('A', 5000000), REPEAT('B', 5000000))) AS total_length;

 total_length
--------------
     10000000
```

## NCHAR 與 NVARCHAR 類型
<a name="r_Character_types-nchar-and-nvarchar-types"></a>

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

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

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

## TEXT 與 BPCHAR 類型
<a name="r_Character_types-text-and-bpchar-types"></a>

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

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

## 多餘空格的意義
<a name="r_Character_types-significance-of-trailing-blanks"></a>

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

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

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

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