varchar 与 nvarchar的区别
我知道一个中文在varchar算2个字符,在nvarchar中算一个但在设计数据库的时候何时用varchar
何时用nvarchar  肩大家指点下

解决方案 »

  1.   

    varchar [ ( n | max ) ] 
    可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。nvarchar [ ( n | max ) ] 
    可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 SQL-2003 同义词为 national char varying 和 national character varying
      

  2.   

    varchar 与 nvarchar的区别
      如果这个字段存储的大部分数据是英文的话,就定为"varchar",   
      大部分数据是中文的话,就定为"nvarchar",   
      我可以这样理解吗? 
      

  3.   

    一般字段中有中文要存入用nvarchar 
      

  4.   

    比如乱七八糟的字符,像韩文或者什么之类的,用varchar就不行了,必须要用nvarchar了.
      

  5.   


    我也是这样理解的,不知道对不对。
    字符长度比较一致的话就用char  nchar ,字符长度不太一致就用vchar nvarchar
      

  6.   

    如果你的列的collation或者db的collation是double-bytes的,那么你用varchar以及nvarchar来存储中文都没有问题,如果不是,那么你就用nvarchar吧,总之用nvarchar处理unicode字符是安全的:
    create table #t1(t varchar(10) collate SQL_Latin1_General_CP1_CI_AI )
    insert into #t1 select N'中文'
    create table #t2(t varchar(10) collate Chinese_PRC_CI_AS )
    insert into #t2 select N'中文'
    create table #t3(t nvarchar(10) collate SQL_Latin1_General_CP1_CI_AI )
    insert into #t3 select N'中文'
    create table #t4(t nvarchar(10) collate Chinese_PRC_CI_AS )
    insert into #t4 select N'中文'
    select * from #t1--??
    select * from #t2--中文
    select * from #t3--中文
    select * from #t4--中文
    drop table #t1,#t2,#t3,#t4
      

  7.   

    varchar 与 nvarchar的区别就在于前者用小字符集,后者用得是大字符集.汉字,日文假名等字符都必须用大字符集,否则再数据库里就显示???.
    另外nvarchar类型还是某些系统函数或存储过程都需要的类型.
      

  8.   


    [转]邹建 《SQL Server 2000开发与管理应用实例》
    如何选择字符字段类型?
    在SQL Server中,用于保存字符数据的数据类型一共有两组:
    unicode(nchar,nvarchar,ntext)和非unicode(char,varchar,text),合理的选择字符字段的数据类型,有助于提高处理效率,降低数据存储空间的使用。
    下面是选择字符字段数据类型的参考标准:
    (1) 可存储
    选择的字段类型必须能完全存储需要存储的数据,而不会导致数据丢失。比如说,存储5000个纯英文字母,如果用非unicode 类型,就可以用varchar(或char),而使用unicode类型的话,就必须用ntext,因为unicode 一律用双字节编码,5000个英文字母就是5000个字符(10000字节),超过了nvarchar(或nchar)支持的最大字符数4000。
    (2) 兼容性
    如果要存储的字符数据包含了双字节字符数据(比如中文汉字),而且要在多种语言的操作系统环境下处理的话,为了避免在不同国家/地区的代码页之间转换数据而导致转化错误,应该选择使用unicode数据类型(nchar,nvarchar,ntext)。
    (3) 处理效率和存储空间
    从数据处理效率上来讲,各种数据类型的处理效率从高到低依次是:char( 或nchar)、varchar(或nvarchar)、text(或ntext)。
    char( 或nchar)用于保存单据票号、身份证号码这类固定(或者比较固定)长度的数据,如果保存的数据长度小于定义的长度,则会在保存的数据后面填充空格。所以它始终占用与字段定义长度相同的存储空间。 
    Varchar( 或nvarchar)用于保存公司名称、地址信息这类长度不固定的数据,它占用的存储空间根据实际保存的数据长度确定。
    Text(或ntext)用于保存前面四种数据类型无法存储的数据。由于它的数据一般不存储在数据行中,在数据处理和检索时,要从另外的地址读取数据,所以它的效率在几种字符类型中是最低的。
    总结:
    ①从存储空间的占用率上来说,无论是否是单字节字符数据,unicode数据类型(nchar,nvarchar,ntext)一律用2个字节表示,所以在存储单字节字符数据时,unicode数据类型(nchar,nvarchar,ntext)比非unicode数据类型(char,varchar,text)耗用更多的存储空间。
    ②Char(或者nchar)存储的数据如果小于定义的长度的话,则会在尾部填充空格,所以如果采用Char(或者nchar)来存储数据长度不固定的数据,就会浪费大量的存储空间。
      

  9.   

    nchar、nvarchar 和 ntext 的用法分别与 char、varchar 和 text 的用法一样,但在以下方面不同: 1.Unicode支持的字符范围更大。
    2.存储 Unicode 字符所需要的空间更大。
    3.nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。
    4.Unicode 常量使用 N 开头来指定:N'A Unicode string'。
    5.所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 
      

  10.   

    多国语言(非英文)用nvarchar
    英文用varchar