nvarchar是什么意思?
SQL Server中的char、nchar、varchar和nvarchar有什么区别?
nvarchar是什么意思?
SQL Server中的char、nchar、varchar和nvarchar有什么区别?
当前回答
到目前为止,所有的答案都表明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个字节。
其他回答
Char:固定长度的字符数据,最大长度为8000。 Nchar:固定长度的unicode数据,最大长度为4000字符。 Char = 8位长度 NChar = 16位长度
Nchar和char的操作方式几乎完全相同,nvarchar和varchar也是如此。它们之间唯一的区别是nchar/nvarchar存储Unicode字符(如果你需要使用扩展字符集,这是必不可少的),而varchar不存储。
因为Unicode字符需要更多的存储空间,nchar/nvarchar字段占用了两倍的空间(例如,在早期版本的SQL Server中,nvarchar字段的最大大小是4000)。
这个问题是这个问题的翻版。
Nchar是固定长度的,可以保存unicode字符。每个字符使用两个字节的存储空间。 Varchar是可变长度的,不能保存unicode字符。它使用一个字节存储每个字符。
Nchar比nvarchar需要更多的空间。
eg,
一个nchar(100)将始终存储100个字符,即使你只输入5 剩下的95个字符将用空格填充。 在nvarchar(100)中存储5个字符将节省5个字符。
nchar(10)是一个长度为10的固定长度的Unicode字符串。nvarchar(10)是一个可变长度的Unicode字符串,最大长度为10。通常,如果所有数据值都是10个字符,则使用前者;如果长度不同,则使用后者。