nvarchar与varchar的区别 和 nchar与nvarchar的区别
首先来认识sql server的两个两个函数:len()和datalength(),因为我们要用到这两个函数来测试。
len:返回指定字符串表达式的字符数,其中不包含尾随空格。
datalength:返回用于表示任何表达式的字节数。
例如select len('易水寒') 返回的是 3,而select datalength('易水寒') 返回的是6,还有一点需要说明的是这两个函数后面的参数,
如果参数是一个数字,则单引号可加可不加,如果参数是中文或其他特殊符号(例如 ¥ & *等),则单引号必须加,否则会提示语法错误!
好了,了解这两个函数后我们可以进入今天的主题了!
先建一个表,用来演示
TABLE tableTest
Column1 nvarchar(20),
Column2 varchar(20),
Column3 nchar(20),
Column4 char(20)
先插入一条数据后效果
Column1 Column2 Column3 Column4
易水寒100 易水寒100 易水寒100 易水寒100
首先说一下nvarchar[(n1)] 和varchar[(n2)] 的区别:
共同点:都是变长数据类型,这个是它们和nchar(char)的最大区别;
不同点:
n1是介于1到4000之间的整数,n2是介于1到8000之间的整数,
先查询一下:select datalength(Column1),datalength(Column2) from dbo.tableTest,返回的结果是12和9,
到此你应该看出这两个数据类型的区别了吧,对于nvarchar来说,每个字符(包括中文,数字和字母等)占2个字节,而对于varchar来说,
中文占用两个字节,而数字和字母则占用一个字节,也许有一些朋友会说,那这样我们不是直接用varchar这种类型就好了吗?
干嘛还要用nvarchar这个呢?其实,要是你确定你的数据行没有包含中文,那varchar肯定是首选的,但是如果你的数据行包括
中文,那就要考虑用nvarchar了,因为如果你在varchar里面存放中文数据,那如果你把数据库移植到其它语言的操作系统,
例如英文操作系统,那这个时候可能会出现乱码,要是一个庞大的数据库在这个时候因为数据类型选错这一个小失误而导致这种后果,
那就很不值得了,如果在设计数据库的时候把varchar改为nvarchar,那就可以避免这种情形了.
接着说nchar和nvarchar的区别
共同点:都支持亚太地区字符(例如中文,日文)
不同点:
先查询一下:select len(Column1),len(Column3) from dbo.tableTest,返回的结果是6和20,
上面也说到了nvarchar和nchar(varchar和char也一样)的最大区别是一个是变长数据类型,而一个是定长数据类型,
这里以上面的表为例子,对于Column3,因为他的数据类型是nchar,长度为20,所以但数据的长度不足20的时候,它会在后面自动以空格
填充,知道20为止,例如'易水寒100',其实系统是在后面填充了4格空格(记住在这里4个空格是占用8个字节的),所以上面才会返回20这个结果,
而nvarchar则是实际的数据长度,后面没有空格填充的,所以上面才会返回6这个结果。但是由于nvarchar是变长的,所以效率肯定比不上nchar.
最后插一段广告,呵呵:http://ajaxload.info/ 是一个国外专门生成loading图片的网站,支持在线预览和下载,有需要的朋友可以去看一下!