sql server中varchar和nvarchar的区别(转)

sql server中varchar和nvarchar的区别


2007-08-29 09:48:43
 标签:nvarchar sql server   [推送到技术圈]

    老是迷糊sqlserver中的nvarchar和varchar有什么区别,今天终于找到了一个满意的答案,在这里做个笔记,以便以后查看~~
 
问:
sql server中的varchar和Nvarchar有什么区别啊,varchar好像是一个英文和一个汉字都站两个字节,而Nvarchar则是一个英文占一个字节,汉字占两个字节。可是这个对asp程序有什么影响?
 
答:
varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar


Char(n)是长度为n个字节的定长的非unicode的字符数据。N为一个介于1到8000之间的值。其存储大小为输入数据的实际字节长度,而不是n个字节。如果你输入的实际字节长度少于n,那么其他位置会被空格填充。在数据存储中英文字母和数字占一个字节,汉字占两个字节。那么char(n)最多可以存储n个英文字母或数字,或者n/2个汉字。

Varchar(n)是长度为n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于1 和8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。注意它和char(n)的区别是char(n)是定长的,varchar(n)是变长的。如果你输入的字符的实际字节长度少于n,那么它的长度就是你实际输入的字节长度。在数据存储中英文字母和数字占一个字节,汉字占两个字节。Varchar(n)最多可以存储n个英文字母或数字,或者n/2个汉字。

Nvarchar(n) 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍. 在数据存储中英文字母,数字,汉字都是占两个字节。Char(n)最多可以存储n个英文字母或数字,或者n个汉字。

varchar是按字节存储的.而带"n"的nvarchar是按字符存储的  
  比如说   varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符.  
  nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的.  
  同样的,char和nchar也一样道理

posted @ 2009-09-11 17:28  ForFreeDom  阅读(2407)  评论(0编辑  收藏  举报