字符数据:CHAR(n) 和 NCHAR(n)

CHAR(n) 数据类型包含 n 个字节的序列。这些字符可以是英语和非英语字符的混合,并且可以是单字节或多字节(亚洲语言)字符。长度 n 的范围是 1 到 32767。

每当数据库服务器检索或存储 CHAR(n) 值时,它都刚好传送 n 个字节。如果插入值的长度小于 n,那么数据库服务器用单字节 ASCII 空格字符扩展该值以构成 n 个字节。如果插入的值的长度超过 n 个字节,那么数据库服务器将截断额外的字符,而不返回错误消息。因此,对于 CHAR(n) 列或变量,当插入或更新的值的长度超过 n 个字节时,不强制实施数据的语义完整性。

CHAR 列中的数据是按代码集顺序排序的。例如:在 ASCII 代码集中,字符 a 的代码集值为 97,b 的值为 98,依此类推。数据库服务器以此顺序将 CHAR(n) 数据进行排序。

NHAR(n) 数据类型还包含 n 个字节的序列。这些字符可以是英语和非英语字符的混合,并且可以是单字节或多字节(亚洲语言)字符。长度 n 具有与 CHAR(n) 数据类型相同的限制。每当检索或存储 NCHAR(n) 值时,刚好传送 n 个字节。 如果数据包含多字节字符,那么传送的字符数可以小于字节数。如果插入的值的长度小于 n,那么数据库服务器用空格字符扩展该值以构成 n 个字节。

数据库服务器根据语言环境指定的顺序对 NCHAR(n) 列中的数据进行排序。例如:法语语言环境指定将字符 ê 排序在值 e 之后但在值 f 之前。换言之,法语语言环境规定的排序顺序是 eêf,等等。有关如何使用语言环境的更多信息,请参阅《GBase 8s GLS 用户指南》。
提示: CHAR(n) 与 NCHAR(n) 数据之间的唯一区别是数据的排序和比较方式不同。可以在 CHAR(n) 列中存储非英语字符。然而,由于数据库服务器对 CHAR(n) 列的任何排序或比较都使用代码集顺序,所以您可能无法获得具有您所期望顺序的结果。

CHAR(n) 或 NCHAR(n) 值可包含制表符和空格,但通常不包含其他不可打印的字符。当用 INSERT 或 UPDATE 插入行时,或者在使用实用程序装入行时,输入不可打印字符是没有意义的。然而,当使用嵌入式 SQL 的程序创建行时,程序可插入除空(二进制零)字符以外的任何字符。由于标准程序和实用程序不期望遇到不可打印字符,所以在字符列中存储不可打印字符不是一个好的想法。

CHAR(n) 或 NCHAR(n) 数据类型的优点是它在所有数据库服务器上都可用。CHAR(n) 或 NCHAR(n) 的唯一缺点是它具有固定的长度。当行与行的数据值长度变化很大时,将浪费空间。