SQL Server中的char,nchar,varchar和nvarchar有什么区别?

What is the difference between char, nchar, varchar, and nvarchar in SQL Server?

nvarchar是什么意思?

SQL Server中的charncharvarcharnvarchar有什么区别?


只是为了清理…或总结…

  • ncharnvarchar可以存储Unicode字符。
  • charvarchar不能存储Unicode字符。
  • charnchar是固定长度,它将为您指定的字符数保留存储空间,即使您没有用尽所有的空间。
  • varcharnvarchar是可变长度,只会占用存储字符的空间。它不会像charnchar那样保留存储。

ncharnvarchar将占用两倍的存储空间,因此只有在需要Unicode支持时才使用它们可能是明智的。


我在the answers(that is is nvarcharvarchar单字节,双字节。the first part of this as below collation画报depends其实在线。P></

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

归来P></

enter image description hereP></

that the characters说明和公社仍然是在varcharversion not the silently和?replaced with)。P></

我不知道中国是there that can be by characters转注,collation单字节。唯一的单字节的ASCII字符集是典型的西方。P></

because of this is possible for an en nvarchar(X)Insert from a column to a varchar(X)column to fail(误差在X与truncation number that is the same denotes在在两个情况下)。P></

SQL Server 2012 adds SC(补锌character),支持UTF-16排序规则。排序规则的字符在这些单nvarchar梅带2或4个字节。P></


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

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

这个问题是这个问题的复制品。


只需添加更多内容:nchar-向数据添加尾随空格。nvarchar-不向数据添加尾随空格。

因此,如果要用"nchar"字段筛选数据集,可能需要使用rtrim来删除空格。例如.NChar(10)一个名为brand的字段存储了单词nike。它在单词的右边加了6个空格。因此,筛选时,表达式应为:rTrm(字段)!brand.value)="耐克"

希望这能帮到别人,因为我刚才有点挣扎!


我attempt to the existing and correct answers:summarizeP></

第一,char总是会使用固定和ncharamount of存储空间,甚至when the string is to be available比存储空间小,只会使用whereas varcharnvarcharas as is needed to多存储空间(双字节加上字符串的商店,商店的量,presumably to the string length)。我记得,"var"变"均值",as在变量空间。P></

第二点是,了解专业,ncharnvarchar商店使用确切的说因为是双字节字符的字符串,whereas char和使用安varcharby the code collation encoding矛盾主页,确切的说因为是一usually which will be字节字符(there are消失了,see below)。使用双字节字符的模式,在很宽的范围内存储of characters can be to the Basic的事情,我记得这里that is to be nchar趋势和nvarchar多更好的选择,当你想支持国际化,which You probably给你。P></

现在有些一些细分。P></

第一和nvarcharcolumns,nchar商店使用UCS-2永远日期。this means that will be确切的说因为是双字节字符的Unicode字符在任何使用,和多语言平面(BMP)the Basic can be by an ncharnvarchar场或存储。不管一个人多,is not that the en房屋任何Unicode字符可以存储。for example,the队列根据维基百科,落在埃及的hieroglyphs points for of the BMP。therefore there are,that can be公社,Unicode字符串在Unicode UTF-8和其他encodings true that cannot be stored in ncharSQL服务器场或nvarcharand strings,埃及的摇篮在hieroglyphs written in them。你可能不fortunately用户写在脚本,但它的东西,在我的心灵!P></

另一个兴趣点confusing but that other is that have highlighted char海报和varchar领域可能使用双字节字符代码for if the characters一定collation PAGE EN……。给马丁史密斯(which shows an example中优秀的中国传统_辐射_脑卒中知识_阶_ _ CS _ 100 KS _ exhibits this as _ WS的行为。看看。)P></

更新:as there are of SQL Server 2012年最后的尾巴,pages for example for utf - 16 _ latin1,通用_ 100 _我们_ as _ SC,which can the全部覆盖范围为Unicode。P></


  • char:固定长度的字符数据,最大长度为8000个字符。
  • nchar:长度固定的Unicode数据,最大长度为4000个字符。
  • char=8位长度
  • nchar=16位长度


nchar[(n)](民族文字)

  • 固定长度的Unicode字符串数据。
  • n定义字符串长度,必须是1到4000之间的值。
  • 存储大小是n字节的两倍。

nvarchar [(n | max)](民族性变化)

  • 长度可变的Unicode字符串数据。
  • n定义字符串长度,可以是1到4000之间的值。
  • max表示最大存储容量为2^31-1字节(2 GB)。
  • 存储大小(以字节为单位)是实际输入数据长度的两倍+2字节

char [(n)](字符)

  • 固定长度,non-Unicode字符串数据。
  • n定义字符串长度,必须是1到8000之间的值。
  • 存储大小为n字节。

varchar [(n | max)](字符变化)

  • 可变长度,非Unicode字符串数据。
  • n定义字符串长度,可以是1到8000之间的值。
  • max表示最大存储容量为2^31-1字节(2 GB)。
  • 存储大小是输入数据的实际长度+2字节。

区别在于:

  • n[var]char存储Unicode,而[var]char只存储单字节字符。
  • [n]char需要固定长度的字符数,而[n]varchar接受的字符数不超过并包括定义的长度。
  • 另一个区别是长度。NChar和nvarchar的长度都可以达到4000个字符。char和varchar的长度可以达到8000个字符。但是对于SQL Server,您也可以使用[N]varchar(max),它最多可以处理2147483648个字符。(2GB,有符号的4字节整数。)


    NChar比nvarchar需要更多的空间。

    如,

    一个字符(100)将始终存储100个字符,即使只输入5个字符,剩下的95个字符将用空格填充。在varchar(100)中存储5个字符将节省5个字符。


    NChar(10)是长度为10的固定长度Unicode字符串。nvarchar(10)是长度可变的Unicode字符串,最大长度为10。通常,如果所有数据值都是10个字符,则使用前者;如果长度不同,则使用后者。


    • NChar是固定长度的,可以容纳Unicode字符。每个字符使用两个字节的存储空间。

    • varchar的长度可变,不能包含Unicode字符。每个字符使用一个字节的存储。


    nvarchar可以存储Unicode字符,每个字符占用2个字节。