VARCHAR(m,r) 数据类型

VARCHAR 数据类型存储包含单字节和(如果语言环境支持)多字节字符的可变长度字符串,其中 m 是列的最大大小(以字节计),r 是为该列保留的最小字节数。

声明为 VARCHAR 的列(无圆括号或参数)具有一个字节的最大大小并且保留的大小置零。

VARCHAR 数据类型是字符可变数据类型的 GBase 8s 实现。可变长度字符串的 ANSI 标准数据类型是 CHARACTER VARYING。

VARCHAR 列的最大大小 (m) 参数的大小范围可以从 1 到 255 个字节。如果您为 VARCHAR 列设置索引,那么最大大小是 254 个字节。可以存储短于(但不能长于)指定的 m 值的字符串。

指定最小保留空间 (r) 参数是可选的。此值可以在从 0255 个字节的范围内,但必须小于 VARCHAR 列的最大大小 (m)。如果您未指定任何最小值,缺省值是 0。当起初打算在列中插入具有短字符串或 NULL 字符串的行,但后来想要用较长的值更新此数据时,应指定此参数。

对于大于 255 个字节的可变长度字符串,可以使用 LVARCHAR 数据类型(其上限是 32,739 个字节)而不是 VARCHAR。

在基于 VARCHAR 列(或 NVARCHAR 列)的索引中,每个索引键都具有基于实际输入的数据值的长度,而不是声明的列的最大大小。(但是,请参阅 IFX_PAD_VARCHAR 环境变量以获取有关如何配置 GBase 8s 所发送或接收的 VARCHAR 和 NVARCHAR 数据字符串有效大小的信息。)

当您在 VARCHAR 列中存储字符串时,只会存储实际数据字符。数据库服务器不会除去任何用户输入的结尾空格的 VARCHAR 字符串,也不会将 VARCHAR 值填充至列的声明长度。如果指定保留空间 (r),但某些数据字符串比 r 字节要短,那么为行保留的某些空间变得无用。

用比较 CHAR 值的相同方式将 VARCHAR 值与其他 VARCHAR 值(和其他字符串数据类型)进行比较。用空格在右边填充较短的值直到这些值具有相同的长度;然后对其比较全长。

相同表的不超过 195 列可以是 VARCHAR 数据类型。

VARCHAR 类型的不可打印字符

用处理 CHAR 值中的不可打印字符的相同方法输入、显示和处理不可打印 VARCHAR 字符。有关详细信息,请参阅 CHAR 类型的不可打印字符

存储 VARCHAR 列中的数字值

当在 VARCHAR 列中插入数字值时,不会用结尾空格将存储的值填充至列的最大长度。数字 VARCHAR 值中的位数是存储该值所需要的字符数。例如:在下一个示例中,存储在表 mytab 中的值为 1

create table mytab (col1 varchar(10));
insert into mytab values (1);
技巧: VARCHAR 将 C 语言的null(二进制 0)和字符串终止符看作不可打印字符的终止字符。

在某些东亚语言环境中,如果数据库语言环境支持多字节代码集,那么 VARCHAR 数据类型能够存储多字节字符。如果存储多字节字符,务必要计算所需的字节数。有关更多信息,请参阅《GBase 8s GLS 用户指南》。

VARCHAR 类型的多字节字符

VARCHAR 数据类型声明中的第一个参数可受字符类型声明中的逻辑字符语义一节中描述的 SQL_LOGICAL_CHAR 功能影响。

整理 VARCHAR 值

NVARCHAR 与 VARCHAR 数据类型之间的主要差别(就如 CHAR 与 NCHAR 之间的差别)是整理顺序的差别。通常,VARCHAR(与 CHAR 和 LVARCHAR 一样)值是按其在代码集中存在的字符顺序进行整理的。

例外情况是 MATCHES 运算符,当 DB_LOCALE(或 SET COLLATION)指定了本地化整理顺序时,如果使用方括号 ( [ ] ) 符号来定义范围,那么它会将本地化整理应用于 NVARCHAR 和 VARCHAR 值(并应用于 CHAR、LVARCHAR 和 NCHAR 值)。有关更多信息,请参阅《GBase 8s GLS 用户指南》。