

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/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 个双字节字符、4 个三字节字符或 3 个四字节字符。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/redshift/latest/dg/r_Character_types.html)

**注意**  
CREATE TABLE 语法支持对字符数据类型使用 MAX 关键字。例如：  

```
create table test(col1 varchar(max));
```
对于 CHAR，MAX 将列宽度定义为 4096 字节。  
对于 VARCHAR，MAX 在 CREATE TABLE 语句中将列宽度定义为 65535 字节。对于内存中操作，VARCHAR(MAX) 最多可支持 16000000 字节。

## 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 个双字节字符、40 个三字节字符或 30 个四字节字符。

```
varchar(120)
```

如果在 CREATE TABLE 语句中使用不带长度说明符的 VARCHAR 数据类型，则默认长度为 256。

[字符串函数](String_functions_header.md)现在支持最多 1600 万个字节。例如，CONCAT 函数之前的输出限制为 65535 个字节，现已提升至 1600 万个字节。

```
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 表，但此列将转换为接受最多包含 256 个字符的可变长度值的 VARCHAR(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 字符串的包含尾部空格在内的长度。尾部空格不会计入固定长度字符串的长度中。