首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server中,char、nchar、varchar和nvarchar之间有什么区别?

在SQL Server中,char、nchar、varchar和nvarchar之间有什么区别?
EN

Stack Overflow用户
提问于 2008-10-06 22:47:33
回答 12查看 642.3K关注 0票数 672

什么是nvarchar

SQL Server中的charncharvarcharnvarchar有什么区别?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-10-06 23:02:34

只是为了澄清..。或者总结..。

  • ncharnvarchar可以存储Unicode,characters.
  • charvarchar不能存储Unicode,characters.
  • charncharfixed-length,即使您没有用完所有space.
  • varcharE236也会为您指定的字符数保留存储空间nvarchar和code>都是variable-length,它们只会占用您存储的字符的空间。It nchar.

不会像或 reserve那样保留存储

nchar和nvarchar将占用两倍的存储空间,所以只有在需要Unicode支持时才使用它们可能是明智的。

票数 929
EN

Stack Overflow用户

发布于 2011-11-24 07:37:49

到目前为止,所有的答案都表明varchar是单字节的,nvarchar是双字节的。这实际上是depends on collation的第一部分,如下所示。

代码语言:javascript
复制
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)to fail with a truncation error (其中X表示在两个实例中相同的数字)。

SQL Server2012添加了支持UTF-16的SC (补充字符)排序规则。在这些排序规则中,单个nvarchar字符可能需要2或4个字节。

票数 100
EN

Stack Overflow用户

发布于 2008-10-06 22:51:41

nchar和char的操作方式几乎完全相同,nvarchar和varchar也是如此。它们之间的唯一区别是nchar/nvarchar存储Unicode字符(如果需要使用扩展字符集,则是必需的),而varchar不存储。

因为Unicode字符需要更多的存储空间,所以nchar/nvarchar字段会占用两倍的空间(例如,在早期版本的SQL Server中,nvarchar字段的最大大小是4000)。

这个问题是this one的副本。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/176514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档