比较:
note:
1.带有var前缀的,意思就是variable,长度可变。
2.长度定长一般存取速度快,但是空间利用率低。变长与之相反。
3.前缀带n的意思就是Unicode ,也就是所有字符都占两字节。对于没有Unicode的字符,一汉字==2英文。
【1】定义一个char[10]和一个varchar[10],存进去的是‘csdn’
char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。
.因为长度固定, char的存取数度还是要比varchar要快得多,方便程序的存储与查找;但是char 多余的空格占位符付出的是空间的代价,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。
char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。
实例理解
【1】char(n) 和 varchar(n),n 为字节数
char(n)
char(4):4 是代表字节数,一个汉字代表一个字符,2个字节;一个英文代表一个字符,一个字节。现在我们假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,所以用两个空格补上后面的两个字节,所以数据库的数据为‘ab ’)
varchar(n)
varchar(4):假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,然而varchar(n)是由var开头的,数据是可变的,所以不用像char(4),用空格补字节的方法,而是可以直接省略空格,所以数据库的数据还是‘ab’)
【2】nchar(n)和nvarchar(n)
我们先弄清楚以n开头的数据类型是什么意思,已n开头表示此字符是unicode编码的格式,不是以n开头的自然不是unicode编码格式。我们在前面说过,括号里面的n是代表字节数,而在这里,由于是unicode编码格式,所以n代表2n个字节数,同样以上面的例子举例
nchar(n)
nchar(4),既然是unicode编码格式并且不是可变的,所以总共可以存储2*4=8个字节,我们现在假如存储‘abcd’(由于是只占四个字节,所以在数据库中的数据为‘abcd ’),假如存储‘中国你好’(则完全可以存放)
nvarchar(n)
既然是unicode编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)
转载自:CSDN博主「景月娇-Kathy」的原创文章
原文链接:https://blog.csdn.net/luckystar_99/article/details/79604251