在下面的表中列出了在POLARDB for Oracle中常用的字符类型。

表 1. Character Types
Name Description
CHAR[(n)] Fixed-length character string, blank-padded to the size specified by n
CLOB Large variable-length up to 1 GB
LONG Variable unlimited length.
NVARCHAR(n) Variable-length national character string, with limit.
NVARCHAR2(n) Variable-length national character string, with limit.
STRING Alias for VARCHAR2 .
VARCHAR(n) Variable-length character string, with limit (considered deprecated, but supported for compatibility)
VARCHAR2(n) Variable-length character string, with limit
说明 上述表格中,其中n是一个正整数;且这些类型能够存储长度达到字符n的字符串。如果尝试存储超过字符n长度的值,将产生错误。除非超出长度的字符都是空格,这种情况下将会把字符串按照最大长度截断。

CHAR

对于类型CHAR来说,如果不指定n的值,n就会默认为1。 如果要存储的字符串长度小于n, 那么类型CHAR的值将会用空格补齐,并且按照这种形式来存储并显示。

附加空格在语义上是不重要的。也就是说,当比较两个类型CHAR值的时候,对于尾部的空格是忽略不计的。而且,当把类型CHAR的值转换成另外一种字符串类型的时候将会删除这些空格。

如果我们要明确地将超出长度的值转换为类型CHAR(N)的长度,那么超出长度的值将被截断到字符串N的长度,而不产生错误(如在SQL标准中指定的一样)。

VARCHAR, VARCHAR2, NVARCHAR and NVARCHAR2

如果要赋值的字符串长度小于n,那么VARCHAR、VARCHAR2、NVARCHAR和NVARCHAR2类型的字符串值将会按照实际的长度进行存储,而不用空格补齐。

说明 对于VARCHAR类型的值来说,尾部的空格在语义上是有意义的。

如果我们要明确地把超出长度的值转换为VARCHAR类型, 那么超出长度的值将被截断到字符串n指定的长度,而不产生错误(如在SQL标准中指定的一样)。

CLOB

我们可以在clob类型中存储长字符串。除了没有指定长度的限制外,CLOB在语义上等同于VARCHAR2。通常来说当字符串的最大长度不可知的时候,建议使用CLOB类型,而不是VARCHAR2类型。
说明 CLOB类型可存储字符串的最大长度大约是1GB。

注意

对于这三种类型数据的存储空间要求来说,如果字符串长度小于127个字节,那么实际存储空间的大小就是实际字符串的长度加上1个字节,如果字符串长度大于等于127个字节,那么实际存储空间的大小就是实际字符串长度加上4个字节。对于CHAR型数据来说,字符串后面附加的空格也是需要存储空间的。而系统会自动压缩长字符串,这样在磁盘上要求的实际存储空间要少一些。长字符串值是存储在后台表中,所以在快速访问短列值的时候,它们不会产生干扰。

数据库字符集决定了用来存储文本值的字符集。