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