CHAR
char是定长的,在字段建立时,空间就固定了,不管是否插入值(NULL也包含在内),都占用字符的空间。例如: char(8),输入字符小于8,后面补空值。输入字符大于8时,会截取。CHAR存储定长数据(英文或数字)很方便,CHAR字段上的索引效率级高。
VARCHAR (n)
可变长且非 Unicode 的字符数据,存储效率没有char高。n介于 1 和 8,000 之间。输入的数据字符长度可以为零。VARCHAR类型的实际长度是它的值的实际长度+1。这一个字节用于保存实际使用了多大的长度。
从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
NVARCHAR (n)
可变长度 Unicode 字符数据。n介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
TEXT
text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
总结
NCHAR、NVARCHAR、NTEXT。 “N”表示存储的是Unicode数据类型的字符。我们知道英文字符只需要一个字节存储就足够了,但汉字需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。