[转] sql数据类型 varchar与nvarchar的区别

时间:2023-03-10 01:51:08
[转] sql数据类型 varchar与nvarchar的区别

SQL Server提供两种数据类型来存储字符信息。在如何在SQL Server或应用程序中使用方面,这两种数据类型大致是一样的。差别在于nvarchar是用于存储处理数据库图表中多语言数据的Unicode数据。其它语言有一套需要保存的字符代码的扩展集,这种数据类型支持这样的扩展。因为需要存储其它语言的扩展字符代码,nvarchar占用的空间是varchar的两倍。

字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

例如两字段分别有字段值:我和coffee 那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

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。

========================================================================

NVARCHAR 
在存储时,无论是全角还是半角,每个字符都占用两个字节。 
在定义时,无论全角或是半角,都是定义字符个数而不是字节数。 
最多显示4000个字符(无论全角或半角) 
是UNICODE标准字符集。 
VARCHAR 
在存储时每个半角字符占用1个字节,每个全角字符占用两个字节。 
在定义时,如果要存储一个汉字,要定义VARCHAR(2)才可以。要存储一个半角英文字母,VARCHAR(1)即可。 
最多显示8000个半角字,4000个全角字 
是非UNICODE字符集。 
举例说名体会一下吧: 
DECLARE @N NVARCHAR(4) 
DECLARE @V VARCHAR(4) 
SET @N='ABCD' 
SET @V='ABCD' 
SELECT N=@N,V=@V,NL=len(@n),VL=len(@v) 
--结果:ABCD ABCD 4 4

SET @N='工人农民' 
set @V='工人农民' 
SELECT N=@N,V=@V,NL=len(@n),VL=len(@v) 
--结果:工人农民 工人 4 2