实例分析varchar和nvarchar的区别--【叶子】

  一、整体介绍

1varchar(n)

(1) 长度为n个字节的可变长度且非Unicode 的字符数据。

(2) n 必须是一个介于18,000 之间的数值。

(3) 存储大小为输入数据的字节的实际长度,而不是n个字节。

2nvarchar(n)

 (1) 包含n个字符的可变长度Unicode字符数据。

 (2) n 的值必须介于14,000 之间。

 (3) 字节的存储大小是所输入字符个数的两倍。

 

二、实例分析

我们首先定义两个不同类型的字符串,来看一下他们的字符数和字节数:

DECLARE @sql_one varchar(200)

SET @sql_one='China中国Beijing北京Olympics奥林匹克'

 

DECLARE @sql_two nvarchar(200)

SET @sql_two='China中国Beijing北京Olympics奥林匹克'  

select dbo.[chinesecount_new]( @sql_two)

 

SELECT DATaLENGTH(@sql_one) '@sql_one字节数',

       LEN(@sql_one) '@sql_one字符数',

       DATaLENGTH(@sql_two) '@sql_two字节数',

       LEN(@sql_two) '@sql_two字符数'

 

/*结果

@sql_one字节数@sql_one字符数@sql_two字节数@sql_two字符数

----------- ----------- ----------- -----------

36          28          56          28

*/   

三、误区分析

如果varchar(n)中n的范围是1~8000,而nvarchar(n)中n的范围是1~4000,是不是varchar就比nvarchar存放的多呢,当然不是。

DECLARE @one varchar(10)

SET @one='忽如一夜春风来千树万树梨花开'

 

DECLARE @two nvarchar(10)

SET @two='忽如一夜春风来千树万树梨花开'

 

SELECT @one 'varchar', @two 'nvarchar'

 

/*结果

varchar    nvarchar

---------- ----------

忽如一夜春     忽如一夜春风来千树万

*/

 

我们可以清楚地看到 varchar(10)只能放5个汉字,而nvarchar(10)能放10

也就是说varchar(8000)nvarchar(4000)存放的汉字的最大上限是一样的。

 

如果是字母或是数字就不一样了!

DECLARE @one varchar(10)

SET @one='abcdefghijklmn'

 

DECLARE @two nvarchar(10)

SET @two='abcdefghijklmn'

 

SELECT @one 'varchar', @two 'nvarchar'

 

/*结果

varchar    nvarchar

---------- ----------

abcdefghij abcdefghij

*/

四、使用规则

由于varchar(n)是非Unicode 的数据类型,而nvarchar(n)是Unicode 的数据类型。所以如果是纯字母和数字的字符串用varchar,而有汉字或是韩文的用nvarchar。这样既可以不影响效果,有最大限度的避免了乱码。

注:Unicode(统 一码 、万国码、单 一码 )是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

© 【叶子】http://blog.csdn.net/maco_wang 原创作品,转贴请注明作者和出处,留此信息。

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值