沧海一叶点滴心得

燎原的星星之火

王立国ID:maco_wang
405次访问,排名2万外好友76人,关注者88
技术在飞速发展,我们就需要不断学习!
maco_wang的文章
原创 4 篇
翻译 0 篇
转载 0 篇
评论 4 篇
王立国的公告
记录技术心得,总结实战经验!
最近评论
yangjia21_2007:学习了
guolei0451:NB
guolei0451:写的太详细了。
y_dong119:不错,介绍的很清楚
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 实例分析varchar和nvarchar的区别--【叶子】收藏

    新一篇: 用SQL语句求某文章中出现关键词的个数--【叶子】 | 旧一篇: 浅谈SQL语句大小写是否区分的问题--【叶子】

      一、整体介绍

    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 原创作品,转贴请注明作者和出处,留此信息。

     

     

    发表于 @ 2008年06月30日 10:06:00|评论(loading...)|收藏

    新一篇: 用SQL语句求某文章中出现关键词的个数--【叶子】 | 旧一篇: 浅谈SQL语句大小写是否区分的问题--【叶子】

    评论

    #guolei0451 发表于2008-06-30 13:01:37  IP: 222.171.22.*
    NB
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 王立国