【1】定义一个char[10]和一个varchar[10],存进去的是‘csdn’
char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。
因为长度固定, char的存取数度还是要比varchar要快得多,方便程序的存储与查找;但是char 多余的空格占位符付出的是空间的代价,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。
【2】有 var 前缀的,表示是实际存储空间是变长的,varchar,nvarchar
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。
【3】n 表示 Unicode 字符,即所有字符都占两个字节,nchar,nvarchar
实例理解
【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个字节,我们现在假如存储‘ab’(由于是只占四个字节,所以在数据库中的数据为‘ab ’),ab后面的四个字节空格补齐,假如存储‘中国你好’(则完全可以存放)
nvarchar(n)
既然是unicode编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)