首先说一下定长和变长
定长,就是固定长度,char(5)就是储存固定为5个字符的储存空间。
例如存储“123”,存储的时候是这样的“123 ”,就是固定占用5个字符空间,如果不够5位数,用空格补上。
变长,就是实际存储空间是变长的。就是在vchar(5)类型的数据存储,如果不满足5个字符,他不会用空格不补上。
例如:vchar(5)存储“哈哈哈”,存储后就是“哈哈哈”,就占用3个字符,最大支持5个字符。
然后说一下Unicode和非Unicode
在数据库中存储数据,英文字符需要一个字节存储就足够了,但是汉字和其他众多的非英文字符,需要两个字节存储。如果汉字和英文同时存在,由于占用空间数不同,就会导致字符串的乱码。Unicode就是为了解决字符串集上面的问题而产生的。他所有的字符都用两个字节来表示,英文字符也用两个字节表示。而前缀就用n表示Unicode,比如nchar,nvchar。
下面分别说一下这个四个的特征
char 定长,8000英文,4000汉字,非Unicode字符集
vchar 变长,8000英文,4000汉字,非Unicode字符集
nchar 定长,4000个字符,无论汉字还是英文,不考虑是否为汉字还是英文,Unicode字符集
nvchar 变长,4000个字符,无论汉字还是英文,不考虑是否为汉字还是英文,Unicode字符集