varchar型变量,只保存一个汉字的话,为何宽度至少要设成2呢?按理说设成1就行呀?
-----------------
因为底层处理都是按unicode编码进行的呀,对于unicode编码,一个英文和一个汉字都同等对待呀,
可是我试了,确实是必须设成两位才能存放一个汉字,这是为什么呢?

解决方案 »

  1.   

    nvarchar按照unicode编码保存数据,varchar不是。
      

  2.   

    看下結果:
    select len('字'),datalength('字'),
    len('a'),datalength('a')---  ----  ---  ---
    1    2   1   1
      

  3.   

    真怪了,为何长度是1呀。我定义的是2,只存了一个汉字。
    declare @s1 varchar(2)
    set @s1='我'
    select @s1
    select len(@s1)
      

  4.   

    贴个图:http://p.blog.csdn.net/images/p_blog_csdn_net/chouqin676/349188/o_ss.JPG
      

  5.   

    上面不是說過了么,
    你用datalength看看
      

  6.   

    LEN
    傳回給定的字串運算式之字元數而非位元組數,字串末尾的空白不計。
    DATALENGTH
    傳回用來代表任何運算式的位元組數目。
      

  7.   

    谢谢,明白了。
    len()函数返回的是字符个数,
    datalength()函数返回的是字节数。
    对于“我”这个字符,就一个字符,所占空间是2个节字。
      

  8.   

    一个汉字两个字结位,一个字符合作数字占两个,
    所以汉字要是定了一个字符varchar(1)他会提示一个。*错误的