数据类型char和varchar还有nchar到底有什么区别?

解决方案 »

  1.   

    联机帮助:   
        
        
      nchar   和   nvarchar   
      nchar   是固定长度   Unicode   数据的数据类型,nvarchar   是可变长度   Unicode   数据的数据类型,二者均使用   UNICODE   UCS-2   字符集。   
        
      nchar(n)   
        
      包含   n   个字符的固定长度   Unicode   字符数据。n   的值必须介于   1   与   4,000   之间。存储大小为   n   字节的两倍。nchar   在   SQL-92   中的同义词为   national   char   和   national   character。   
        
      nvarchar(n)   
        
      包含   n   个字符的可变长度   Unicode   字符数据。n   的值必须介于   1   与   4,000   之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar   在   SQL-92   中的同义词为   national   char   varying   和   national   character   varying。   
        
      注释   
      如果没有在数据定义或变量声明语句中指定   n,则默认长度为   1。如果没有使用   CAST   函数指定   n,则默认长度为   30。   
        
      如果希望列中所有数据项的大小接近一致,则使用   nchar。   
        
      如果希望列中数据项的大小差异很大,则使用   nvarchar。   
        
      使用   nchar   或   nvarchar   的对象被赋予数据库的默认排序规则,除非使用   COLLATE   子句赋予特定的排序规则。   
        
      SET   ANSI_PADDING   OFF   不适用于   nchar   或   nvarchar。SET   ANSI_PADDING   ON   永远适用于   nchar   和   nvarchar。
      

  2.   

    对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。
    1.有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar
          所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。2.n表示Unicode字符,即所有字符都占两个字节,nchar,nvarchar
         字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。3.基于以上两点来看看字段容量char,varchar 最多8000个英文,4000个汉字 
    nchar,nvarchar 可存储4000个字符,无论英文还是汉字 
    4.使用(个人偏好)
          a.如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char 
          b.能确定长度又不一定是ansi字符或者,那么用nchar;
          c.对于超大数据,如文章内容,使用nText
          d.其他的通用nvarchar 
    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=781946