varchar,nvarchar 跟gb2312,utf-8之类有什么关联与联系?

thanksfriend 2009-05-20 11:27:24
varchar,nvarchar 跟gb2312,utf-8之类有什么关联与联系?
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2009-05-21
  • 打赏
  • 举报
回复
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。

联系吗,如一楼所说,一种是数据类型,一种是字符集。
Limpire 2009-05-21
  • 打赏
  • 举报
回复
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编码
*/
--小F-- 2009-05-20
  • 打赏
  • 举报
回复
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。

百年树人 2009-05-20
  • 打赏
  • 举报
回复
varchar,nvarchar 是数据类型,字符型

gb2312,utf-8 是字符集

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧