本文介绍了PolarDB PostgreSQL版(兼容Oracle)支持的常用字符类型。

下表列出常用的字符类型。

名称描述
CHAR[(n)]固定长度的字符串,如果长度不足n,用空格填充至长度为n。
CLOB大型可变长度字符串,最大为1 GB。
LONG可变长度字符串,长度无限制。
NVARCHAR(n)可变长度的字符串,长度有限制。
NVARCHAR2(n)可变长度的字符串,长度有限制。
STRINGVARCHAR2的别名。
VARCHAR(n)可变长度字符串,长度有限制(不推荐使用,但出于兼容性考虑,支持该类型)。
VARCHAR2(n)可变长度字符串,长度有限制。
TEXT长字符串,最大长度为1 GB。
说明 上述表格中,其中n是一个正整数,且这些类型能够存储长度达到字符n的字符串。如果尝试存储超过字符n长度的值,将产生错误。除非超出长度的字符都是空格,这种情况下将会把字符串按照最大长度截断。

CHAR

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

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

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

VARCHAR、VARCHAR2、NVARCHAR和NVARCHAR2

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

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

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

CLOB

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

TEXT

可以在TEXT类型中存储长字符串。TEXT和CLOB类型类似,没有长度限制。可用于存储最大长度不可知的字符串。
说明 TEXT类型可存储字符串的最大长度大约是1GB。

注意

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

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