db2 char varchar nvarch 区别

character   就是char,
1.最大长度不同,char   最大254   bytes,varchar   最大   32672   bytes
2   存储不同
char(n)     在数据库占用   n   个字节,在数据库中以空格补足,但在取出来时末尾的空格将被去掉

varchar(n)   在数据库中至少占用1个字节,在数据库中末尾的空格将自动去掉,实际占用录入数据长度   +1   或者   +2   字节。 

L   数据长度
L+1   bytes   L <=M       0 <=M <=256
L+2   bytes   L <=M       256 在数据库中末尾的空格将自动去掉


char   一般是用来存储一些定长的字符串,对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义 char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。

varchar  主要是存储不定长的字符串 Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"

long   varchar也是存储不定长的字符串,但是他的长度比varchar要长,varchar 32700 (ms sql server varchar 8000),而long   varchar更长,为32700。
char,varchar类型的字段可以存放到缓冲池中,而l定义long   varchar类型的字段,db2不会预先为此字段分配内存,也就是说在查询时,db2对此字段的内容不会预先把他放到缓冲池中,因此查询效率比较低下。


Nchar类型和Nvarchar类型是怎么一回事呢?为了与其他多种字符的转换,如中文,音标等,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。
nvarchar(n):可变长度 Unicode 数据,字节的存储大小是所输入字符个数的两倍,就是说它是双字节来存储数据的。如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。varchar一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量,可以解决多语言字符集之间的转换问题

简单来说:

char是定长字符串(1-255)
varchar是非定长字符串(1-32672)
Long Varchar也是非定长字符串(1-32700)
char是最简单的,系统分配固定长度的空间给它,容易被系统调整空间,性能比较高;
Varchar必须要存在于一个Page之内,当varchar数据很常的时候,会形成一条记录跨页的现象,成为Overflow Page现象,这在作Reorgchk的时候是用来判断是否需要Reorg的一个参数,一旦形成跨页存储,性能将降低;
LongVarChar在Varchar的长度扩大至32672的时候已经没有太大的意义了,每个Longvarchar在记录中只占24个字节,估计是作为一种索引,真正的内容存放在单独的Page中,这样就可以达到很大的长度。这样的方式致使性能更加降低。

你可能感兴趣的:(DB)