nvarchar是什么意思?
SQL Server中的char、nchar、varchar和nvarchar有什么区别?
nvarchar是什么意思?
SQL Server中的char、nchar、varchar和nvarchar有什么区别?
当前回答
区别在于:
N [var]char存储unicode,而[var]char仅存储单字节字符。 [n]char需要固定长度的字符数,而[n]varchar接受可变长度的字符数,直到并包括定义的长度。
另一个区别是长度。nchar和nvarchar的长度都可以达到4000个字符。char和varchar最多可以有8000个字符长。但是对于SQL Server,你也可以使用[n]varchar(max),它最多可以处理2147,483,648个字符。(2g,一个有符号的4字节整数。)
其他回答
区别在于:
N [var]char存储unicode,而[var]char仅存储单字节字符。 [n]char需要固定长度的字符数,而[n]varchar接受可变长度的字符数,直到并包括定义的长度。
另一个区别是长度。nchar和nvarchar的长度都可以达到4000个字符。char和varchar最多可以有8000个字符长。但是对于SQL Server,你也可以使用[n]varchar(max),它最多可以处理2147,483,648个字符。(2g,一个有符号的4字节整数。)
到目前为止,所有的答案都表明varchar是单字节,nvarchar是双字节。第一部分实际上取决于如下所示的排序方式。
DECLARE @T TABLE
(
C1 VARCHAR(20) COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS,
C2 NVARCHAR(20)COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS
)
INSERT INTO @T
VALUES (N'中华人民共和国',N'中华人民共和国'),
(N'abc',N'abc');
SELECT C1,
C2,
LEN(C1) AS [LEN(C1)],
DATALENGTH(C1) AS [DATALENGTH(C1)],
LEN(C2) AS [LEN(C2)],
DATALENGTH(C2) AS [DATALENGTH(C2)]
FROM @T
返回
请注意,VARCHAR版本中仍然没有表示华和国字符,它们被无声地替换为?。
在这种排序中,实际上仍然没有可以用一个字节表示的汉字。唯一的单字节字符是典型的西方ASCII字符集。
正因为如此,从nvarchar(X)列到varchar(X)列的插入可能会因截断错误而失败(其中X表示两个实例中相同的数字)。
SQL Server 2012增加了支持UTF-16的SC(补充字符)排序规则。在这些排序中,单个nvarchar字符可能占用2或4个字节。
只是为了澄清…或者总结一下……
nchar和nvarchar可以存储Unicode字符。 char和varchar不能存储Unicode字符。 Char和nchar是固定长度的,即使你没有用完所有的空间,也会为你指定的字符数量保留存储空间。 Varchar和nvarchar是可变长度的,只会为你存储的字符占用空间。它不会像char或nchar那样预留存储空间。
nchar和nvarchar将占用两倍的存储空间,因此只有在需要Unicode支持时才使用它们可能是明智的。
Nchar比nvarchar需要更多的空间。
eg,
一个nchar(100)将始终存储100个字符,即使你只输入5 剩下的95个字符将用空格填充。 在nvarchar(100)中存储5个字符将节省5个字符。
再补充一点: Nchar -在数据中添加尾随空格。 Nvarchar -不向数据添加尾随空格。
因此,如果你要通过'nchar'字段过滤数据集,你可能想要使用RTRIM来删除空格。 如。 nchar(10)字段名为BRAND存储单词NIKE。 它在单词右边增加了6个空格。 因此,在筛选时,表达式应该是: RTRIM(Fields!BRAND.Value) = "NIKE"
希望这能帮助一些人,因为我刚刚还在和它斗争!