可变长度字符串:CHARACTER VARYING(m,r)、VARCHAR(m,r)、NVARCHAR(m,r) 和 LVARCHAR(m)

通常,字符列中的数据值具有不同的长度。即,许多值具有平均长度,只有少数值具有最大长度。对于以下数据类型,m 表示最大字节数,r 表示列存储的最小字节数。这些可变长度数据类型旨在当您存储此类数据时节省磁盘空间:
CHARACTER VARYING (m,r)
CHARACTER VARYING (m,r) 数据类型包含最多 m 个字节、最少 r 个字节的序列。此数据类型是可变长度字符数据的符合 ANSI 的格式。CHARACTER VARYING (m,r) 支持代码集顺序以进行字符数据比较。
VARCHAR (m,r)
VARCHAR (m,r) 是特定于 GBase 8s 的数据类型,用于存储长度可变的字符数据。它在功能上与 CHARACTER VARYING(m,r) 相同。
NVARCHAR (m,r)
NVARCHAR (m,r) 也是特定于 GBase 8s 的数据类型,用于存储长度可变的字符数据。它按语言环境指定的顺序比较字符数据。
LVARCHAR(m)
LVARCHAR 是特定于 GBase 8s 的数据类型,用于存储 1 到 32,739 个字节的长度可变的字符数据。如果在列长度声明中未指定最大大小,那么缺省值为 2,048 个字节。LVARCHAR 支持将代码集顺序用于整理,并且还由数据库服务器用于对字符串的内部操作,其最大大小依赖于操作系统。
提示: NVARCHAR(m,r) 数据与 CHARACTER VARYING(m,r) 或 VARCHAR(m,r) 数据的数据比较方式有所不同。有关语言环境如何确定代码集和排序顺序的更多信息,请参阅字符数据:CHAR(n) 和 NCHAR(n)

在创建为 NLSCASE INSENSITIVE 的数据库中,数据库服务器仅处理 NCHAR 和 NVARCHAR 数据类型,而与字母大小写变体无关,这样(例如)NCHAR 字符串“pH”和“Ph”在订购、排序和比较操作中将视为重复值。

将列定义为可变长度数据类型时,可以指定 m 表示最大字节数。如果插入的值所包含的字节数小于 m,那么数据库服务器不会(像对 CHAR(n) 和 NCHAR(n) 值所做的那样)使用单字节空格来扩展值。相反,数据库服务器在磁盘上用 1 个字节长度的字段来只存储实际内容。对于已建立索引的列,m 的限制是 254 字节,对于未建立索引的列,限制是 255 字节。

第二个参数 r 是可选的保留长度,它对字节数设置的限制比存储在磁盘上的值所需要的低。即使值需要的字节数小于 r,也仍然分配 r 个字节来存放该值。其目的是在更新行时节省时间。(请参阅可变长度执行时间。)LVARCHAR 数据类型不支持任何预留长度。

与 CHAR(n) 数据类型相比,CHARACTER VARYING(m,r)、LVARCHAR(m) 或 VARCHAR(m,r) 数据类型的优点如下:

与 NCHAR(n) 数据类型相比,NVARCHAR(m,r) 数据类型也同样有这些优点。

使用可变长度数据类型时可能存在的缺点如下: