varchar,nvarchar 是数据类型,字符型gb2312,utf-8 是字符集
解决方案 »
- sql的复制与订阅能解决用户量访问量过大的问题吗?
- 怎么把数据库中的表取出来放到DataTable中?
- 简单问题帮忙解决,马上给分
- 求一删除语句
- Windows 不能在 本地计算机 启动 SQL Server (SQLEXPRESS)
- 最为基础的数据备份的问题
- 为什么我删掉一个登录用户后,再去新建一个同名登录的时候会提示21002错误:用户已存在?
- 请大神帮忙转换一条SQL语句
- 小弟拜求sql2000的电子教材,望哪位指点方向,或者发送至小弟邮箱:[email protected],(“00”为零零)谢谢啦! (xcani )
- 求助:一个查询问题!
- sql查询效率问题?
- 高度难题,请高手帮忙,希望是SQL语句能搞!
固定长度 (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。
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。 联系吗,如一楼所说,一种是数据类型,一种是字符集。
一种字符编码方法,可以容纳全世界所有语言文字的编码方案。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编码
*/