字符类型 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

从 2025 年 11 月 1 日起,Amazon Redshift 将不再支持创建新的 Python UDF。如果您想要使用 Python UDF,请在该日期之前创建 UDF。现有的 Python UDF 将继续正常运行。有关更多信息,请参阅博客文章

字符类型

字符数据类型包括 CHAR(字符)和 VARCHAR(字符变体)。

存储和范围

CHAR 和 VARCHAR 数据类型是按照字节而不是字符来定义的。CHAR 列只能包含单字节字符,因此 CHAR(10) 列可包含最大长度为 10 字节的字符串。VARCHAR 可包含多字节字符,并且每个字符最多可以有 4 个字节。例如,VARCHAR(12) 列可包含 12 个单字节字符、6 个双字节字符、4 个三字节字符或 3 个四字节字符。

名称 存储 范围(列宽度)
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 设置将列的宽度定义为 4096 字节 (CHAR) 或 65535 字节 (VARCHAR)。

CHAR 或 CHARACTER

使用 CHAR 或 CHARACTER 列存储固定长度字符串。这些字符串将使用空格填补,因此 CHAR(10) 列始终占用 10 字节的存储。

char(10)

未指定长度的 CHAR 列将生成 CHAR(1) 列。

VARCHAR 或 CHARACTER VARYING

使用 VARCHAR 或 CHARACTER VARYING 列存储具有固定限制的可变长度字符串。这些字符串不会使用空格填补,因此 VARCHAR(120) 列最多包含 120 个单字节字符、60 个双字节字符、40 个三字节字符或 30 个四字节字符。

varchar(120)

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

字符串函数现在支持最多 1600 万个字节。例如,CONCAT 函数之前的输出限制为 65535 个字节,现已提升至 1600 万个字节。

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

NCHAR 和 NVARCHAR 类型

您可使用 NCHAR 和 NVARCHAR 类型(也称为 NATIONAL CHARACTER 和 NATIONAL CHARACTER VARYING 类型)创建列。这些类型将分别转换为 CHAR 和 VARCHAR 类型,并且使用指定字节数量存储。

未指定长度的 NCHAR 列将转换为 CHAR(1) 列。

未指定长度的 NVARCHAR 列将转换为 VARCHAR(256) 列。

TEXT 和 BPCHAR 类型

您可创建包含 TEXT 列的 Amazon Redshift 表,但此列将转换为接受最多包含 256 个字符的可变长度值的 VARCHAR(256) 列。

您可创建包含 BPCHAR(空格填补字符)类型的 Amazon Redshift 列,Amazon Redshift 会将此列转换为固定长度的 CHAR(256) 列。

尾部空格的意义

CHAR 和 VARCHAR 数据类型存储长度最多为 n 字节的字符串。尝试将更长的字符串存储到这些类型的列中将导致错误,除非额外的字符全为空格,这样字符串将截断至最大长度。如果字符串短于最大长度,CHAR 值将使用空格填补,但 VARCHAR 值将存储不带空格的字符串。

CHAR 值中的尾部空格始终无语义意义。当比较两个 CHAR 值时将忽视尾部空格,而不将其包含在 LENGTH 计算中,在将 CHAR 值转换为其他字符串类型时将删除尾部空格。

VARCHAR 和 CHAR 值中的尾部空格将在比较值时视为无语义意义。

长度计算将返回 VARCHAR 字符串的包含尾部空格在内的长度。尾部空格不会计入固定长度字符串的长度中。