对于程序中的string型字段,SQLServer中有char, varchar, nchar, nvarchar四种类型来对应:
1,定长和变长
定长就是长度固定的,当输入的数据长度没有达到指定的长度时候,将自动以英文空格在其后填充, 使得长度达到相应的长度
有var前缀的,表示实际存储空间是变长的,varchar, nvarchar变长字符数据不会使用英文空格填充,text实际存储的也是变长
2,unicode, 和非 unicode
数据库中,英文字符只需要一个字节存储,汉字和其他非英文字符,需要两个字节存储,
如果英文和汉字同时存在,由于占用空间不同,容易造成混乱,导致读取出来的字符串是乱码
unicode字符集是为了解决字符集不兼容的问题产生的,所有的字符都使用两个字节表示,前缀n表示unicode
3,基于以上两点查看字段容量
char, varchar 最多8000个英文, 4000个汉字
nchar, nvarchar可以存储4000个字符,无论是英文还是汉字
4,使用
如果数据量非常大,能百分百确定长度且保存只是ANSI字符,使用char
能确定长度不一定是ANSI字符,使用nchar
对于超大数据,如文章内容,使用nText
对于其他的通用nvarchar
char, varchar, nchar, nvarchar 特点比较:
char, 存储定长数据很方便,字段上的索引效率极高,
varchar,存储变长数据, 存储效率没有char 高, varchar类型的实际长度是它的值的实际长度+1, 使用一个字节存储长度
从空间上考虑,用**varchar**合适;从效率上考虑,用**char**合适,关键是根据实际情况找到权衡点。
text,存储的是可变长度的非unicode数据,最大长度为2**31 - 1个字符