nvarchar(MAX)将保留的最大字符数是多少?

qua*_*els 101 t-sql sql-server

我是这个概念的新手nvarchar(MAX).它会包含多少个字符?

mar*_*c_s 154

最大.容量是2千兆字节的空间 - 所以你看到的是超过10亿个2字节字符,适合一个NVARCHAR(MAX)字段.

使用其他答案更详细的数字,您应该能够存储

(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters

1 billion, 73 million, 741 thousand and 822 characters to be precise
Run Code Online (Sandbox Code Playgroud)

在你的NVARCHAR(MAX)专栏中(不幸的是,后半个角色被浪费了......)

更新:正如@MartinMulder所指出的:任何可变长度字符列也有2字节的开销用于存储实际长度 - 所以我需要从2 ^ 31 - 1我之前规定的长度中减去两个以上的字节- 因此你可以存储1个Unicode字符小于我曾经声称过.

  • @quakkels:除非你打算将Tolstoi的"战争与和平"(大约310万个字符)排在近350倍之外 - 不,你不必担心容量:-)而且因为它是VARCHAR/NVARCHAR类型,它将会总是只使用所需的空间 - 不用担心浪费或不必要的预留空间...... (20认同)
  • @quakkels:如果你不需要亚洲,阿拉伯或西里尔语言的2字节支持,请使用`VARCHAR(MAX)`.使用`(N)VARCHAR(x)`如果你知道一个字符串永远不会长于x个字符(不要使用`NVARCHAR(MAX)`作为名字 - 使用`NVARCHAR(50)`或任何有意义的东西您) (5认同)
  • 真?这很酷.只是出于好奇,在什么情况下你不想使用nvarchar(MAX)? (2认同)

Adr*_*der 11

来自char和varchar(Transact-SQL)

varchar [(n | max)]

可变长度的非Unicode字符数据.n可以是1到8,000之间的值.max表示最大存储大小为2 ^ 31-1个字节.存储大小是输入的实际数据长度+ 2个字节.输入的数据长度可以是0个字符.varchar的ISO同义词是char变化或字符变化.


Tho*_*mas 5

2^31-1 字节。因此,varchar(max) 的字符数略少于 2^31-1 个字符,nvarchar(max) 的字符数的一半。

nchar 和 nvarchar