跳到主要内容

CHAR 和 VARCHAR

CHARVARCHAR 类型相似,但区别于存储和搜索的方式、最大长度以及是否保留尾部空格。

CHAR

CHAR 类型声明的长度为可以存储的最大字符数。例如,CHAR(30) 表示最多可容纳 30 个字符。

语法如下:

[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

CHARACTER SET 用于指定字符集。如果需要,可以使用 COLLATE 属性以及其他属性指定字符集的排序规则。如果指定 CHARACTER SET 的二进制属性,则会将列创建为相应的二进制字符串数据类型,CHAR 会变为 BINARY

CHAR 列长度可以是 0 到 256 之间的值。存储 CHAR 值时,会用空格右填充到指定的长度。

对于 CHAR 列,无论 SQL 模式如何,都会以静默方式截断插入值中多余的尾部空格。搜索 CHAR 值时,如果没有启用 PAD_CHAR_TO_FULL_LENGTH SQL 模式,就会删除尾部空格。

VARCHAR

VARCHAR 类型声明的长度 M 为可以存储的最大字符数。例如,VARCHAR(50) 表示最多可容纳 50 个字符。

语法如下:

[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]

CHARACTER SET 用于指定字符集。如果需要,可以使用 COLLATE 属性以及其他属性指定字符集的排序规则。如果指定 CHARACTER SET 的二进制属性,则会将列创建为相应的二进制字符串数据类型,VARCHAR 会变为 VARBINARY

VARCHAR 列长度可以指定为 0 到 262144 之间的值。

CHAR 相比,VARCHAR 值存储形式为 1 字节或 2 字节的长度前缀加数据。长度前缀表示值中的字节数。如果值不超过 255 个字节,则该列占用一个字符,如果值可能超过 255 个字节,则占用两个字符。

对于 VARCHAR 列,无论 SQL 模式如何,超过列长度的尾部空格在插入之前会被截断并生成告警。

VARCHAR 值在存储时不会被填充。根据标准 SQL,在存储和搜索值时会保留尾部空格。

另外,seekdb 还支持扩展类型 CHARACTER VARYING(m),但是推荐使用 VARCHAR(m)