字符类型 - Amazon Redshift

字符类型

字符数据类型包括 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。如果在表达式中使用,则输出大小将使用输入表达式确定(最大为 65535)。

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 字符串的包含尾部空格在内的长度。尾部空格不会计入固定长度字符串的长度中。