varchar,nvarchar 是数据类型,字符型gb2312,utf-8 是字符集

解决方案 »

  1.   

    char 和 varchar
    固定长度 (char) 或可变长度 (varchar) 字符数据类型。char[(n)]长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
      

  2.   

    varchar[(n)] 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。 nvarchar(n) 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在 SQL-92 中的同义词为 national char varying 和 national character varying。 
    varchar[(n)] 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。 nvarchar(n) 包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在 SQL-92 中的同义词为 national char varying 和 national character varying。 联系吗,如一楼所说,一种是数据类型,一种是字符集。
      

  3.   

    UNICODE
    一种字符编码方法,可以容纳全世界所有语言文字的编码方案。UNICODE - Universal Multiple-Octet Coded Character Set,简称UCS。
    UCS-2使用2个字节编码,向下兼容ASCII,前面补零。
    UCS-4使用4个字节编码。UTF-8
    因为UNICODE统一使用2字节编码,对于只是用ASCII编码的国家,显然是一个空间资源浪费,UTF-8就出来了,UTF-8是UNICODE的一种变长字符编码。
    UTF-8用1到6个字节编码UNICODE字符:ASCII字符的UTF-8编码与ASCII相同,使用一个字节;如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果 UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。
    可见,对于双字节的字符,UTF-8编码之后会引起空间膨胀。具体编码方式如果不是搞编码转换的编程,不需要太过深入了解。GB2312
    汉字的编码方案,向下兼容ANSI的ASCII编码,每个汉字占两字节,ASCII占一个字节,这是中国的编码方式,非国际标准,为了国际化,就要使用UNICODE或UTF-8/16。如果ASCII字符比较多,双字节的字符比较少,用UTF-8编码比较节约空间,反之可能使用UCS-2编码更好。declare @1 varchar(10), @2 nvarchar(10)
    select @1 = '汉', @2 = N'汉'
    select 汉 = @1, gb2312 = convert(varbinary, @1), [unicode/little endian] = convert(varbinary, @2), [unicode/little endian] = convert(varbinary(2),unicode(@2))/*
    汉    gb2312    unicode/little endian    unicode/little endian
    ----- --------- ------------------------ ---------------------
    汉    0xBABA    0x496C                   0x6C49
    *//*
    varchar的编码与本机的区域语言有关
    nvarchar使用UCS-2编码
    */