通常,字符列中的数据值具有不同的长度。即,许多值具有平均长度,只有少数值具有最大长度。对于以下数据类型,
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) 数据类型也同样有这些优点。
使用可变长度数据类型时可能存在的缺点如下:
- 除 LVARCHAR 之外,不支持超出 255 个字节的长度。
- 在某些情况下,表的更新速度可能会比较慢。