char(n)
非 Unicode 字符数据,长度固定,效率较varchar高,输入数据必须是一个长度介于 1 和 8,000 字节之间的数值(这是因为n只能取在1和8000之间,否则报错)。若输入的字符小于指定长度时,它会在后面补空值。若你输入的字符大于指定长度时,它会截去超出的字符。其中1个汉字占2个字节,1个字母或数字占1个字节。
varchar(n)
非 Unicode 字符数据,长度可变,效率较char低。以字节作存储单位,输入数据必须是一个长度介于 1 和 8,000 字节之间的数值(同理)。存储大小为输入数据的字节的实际长度,而不是n个字节。其中1个汉字占2个字节,1个字母或数字占1个字节。
nchar(n)
Unicode 字符数据,长度固定。输入的数据必须是一个长度介于1与4000字符之间的数值(同理)。若输入的字符小于指定长度时,它会在后面补空值。若你输入的字符大于指定长度时,它会截去超出的字符。字节的存储大小是所输入字符个数的两倍。其中汉字和字母数字均占2个字节。
nvarchar(n)
Unicode 字符数据,长度可变。以字符为存储单位,输入的数据必须是一个长度介于1与4000字符之间的数值(同理)。字节的存储大小是所输入字符个数的两倍。其中汉字和字母数字均占2个字节。
text
非Unicode数据,长度可变,以字符为存储单位,最大长度为2^31-1(2,147,483,647)个字符。text无默认值,后面无需指定长度。
ntext
差别同上。
总结:
1.若是仅有字母和数字的数据,选择char、varchar,若是汉字和字母数字组合,可选择nchar、nvarchar。这里的目的是为了节省空间。
2.若定长的数据则选择char、nchar,不定长的可选择varchar、nvarchar。同样这里也为了节省空间。
ps:以下是百度百科关于Unicode的部分解释,希望对理解文章有所帮助。
Unicode(中文名统一码、也称万国码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。