数据的,nvarchar是使用Unicode来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用 一个字节 ,而如果字段的类型为nvarchar,则会占用 两个字节 .
正常情况下,我们使用varchar 也可以存储中文字符 ,但是如果遇到操作系统是英文操作系统并且对中文字体的 支持不全面时 , 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.
但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.
使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.
当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.
补充:varchar(n)和nvarchar(n)都能处理中文,但是有些细节需要注意:当遇到中英文混合的情况时,varchar类型读取时会每个字节去判断到底是一个英文字符还是等待和下一个字节一起解析为一个中文字符,而nvarchar则不用,直接每次两个字节一起解析为一个Unicode字符。速度自己去体会了。
------------------------------------------------------------------------------------------------------------------------
总结:
1、varchar(n)括号中n限定的是能存储的最大字节数,nvarchar(n)括号中n限定的是能存储的最大字符数;
2、varchar和nvarcahr使用情形:在字符中全是英文时使用varchar,全是中文是使用nvarchar,中英文混合时推荐使用nvarchar。
3、char和varchar使用情形:注重读取效率时使用char(注意使用过程中要去除末尾空格),注重使用空间时使用varchar。