`
yiyeqinghuasoon
  • 浏览: 645364 次
文章分类
社区版块
存档分类
最新评论

实例分析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(统<chmetcnv unitname="码" sourcevalue="1" hasspace="False" negative="False" numbertype="3" tcsc="1" w:st="on">一码</chmetcnv>、万国码、单<chmetcnv unitname="码" sourcevalue="1" hasspace="False" negative="False" numbertype="3" tcsc="1" w:st="on">一码</chmetcnv>)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics