定长的存储ASCII码字节数据,过去使用这种类型保存数据,可是因为定长势必浪费存储空间;可是效率高oracle
不定长的存储ASCII码字节数据,即便初始化空间为5,若是只存储长度为3的字节,大家也只是占用3个字节的空间;相比char,varchar能够大量节约空间,可是在效率上稍低,缘由是长度的判断致使要移位操做,不过这种影响小的能够不用计算,因此在开发中尽可能使用varchar;
编码
不定长的存储字符数据,这个与varchar的最大区别就是,varchar存储的是字节,而nvarchar存储的字符,也就是说,若是你初始化的空间是5的话,那么意思是申请了5个字符的空间,对于Unicode编码咱们知道不一样字符所占的字节是不同的,可是英文只是一个字节就能知足,中文就不同了,因此,若是你采用nvarchar做为存储英文的话,那就是大量浪费空间。spa
varchar2是oracle可变长的数据类型,在SqlServer中称为varchar,他的特色就是可变长,好比定义表的时候采用code
FNAME varchar2(20) 意思是FNAME字段最大采用20个字节存储,每一个字节就是一个8位,也就是 0-127 的ASCII码,实际上这个FNAME的字符串长度就是最大为 20 ,可是不必定为 20;他是不能存储非ASCII码字符的;orm
nvarchar2 是oracle可变长的数据类型,在SqlServer中称为nvarchar,他的特色是变长,并且每一位都是用Unicode编码存储,好比定义表的时候采用 FNAME nvarchar2(20) 意思是FNAME字段最大采用20个Unicode字符存储,每一个字符占用2个字节,两个字节与Unicode的标准码对应;实际上这个FNAME的字符串长度就是最大为 20 ,可是不必定为 20
开发
char:定长存储ASCII码字节字符串
nchar:定长储存Unicode字符it
varchar:变长储存ASCII码字节效率
nvarchar:变长储存Unicode字符数据类型