NVARCHAR(MAX)的最大字符数是多少?

282

我在 SQL Server 2008 中声明了一个类型为 NVARCHAR(MAX) 的列,使用 MAX 作为长度时它的最大字符数是多少?

4个回答

585

NVARCHAR(MAX)类型的列最大大小为2 GByte。

由于NVARCHAR每个字符使用2个字节,因此其可容纳约10亿个字符。

列举例:列可以存储大约166本完整的《战争与和平》书籍,该书共1440页,包含约600,000个单词-即大约6百万个字符。

这对您是否足够? :-)


36
只是小小的挑剔。NVARCHAR在大多数字符情况下使用2个字节。对于Unicode字符超过U+00FFFF的情况,它将使用四个字节。 - Eli Algranti
3
吹毛求疵:"存储大小为两倍 n 个字节加上 2 个字节。" (来源:https://learn.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-ver15#arguments) - RobIII
3
一个常见的误解是认为 NCHAR(n) 和 NVARCHAR(n) 中的 n 定义了字符数。但在 NCHAR(n) 和 NVARCHAR(n) 中,n 实际上定义了字节对的字符串长度。 - RobIII

84

13
如果您的数据不超过4000个字符,则也不建议使用此方法,因为存在索引问题。 - HLGEM
我认为这已经过时了。请参考@marc_s的答案。 - Fabio Milheiro
嗨@FabioMilheiro,我可以问一下哪个部分已经过时了吗?是指针存储部分吗? - Xu Shaoyang

14

来自MSDN文档

nvarchar [ ( n | max ) ]

变长Unicode字符串数据。 n 定义了字符串长度,可以是从1到4,000的值。 max 表示最大存储大小为2^31-1字节(2 GB)。 存储大小以字节为单位,是实际输入数据长度的两倍加上2个字节。


12

实际上,nvarchar(MAX) 可以存储约1070000000个字符。


你能解释一下你从哪里得到那个数字,以及你所说的“准确”是什么意思吗?(例如,你是否在说这不是一个硬性限制,但是如果有更多字符会出现问题?出现什么样的问题?为什么?) - Adi Inbar
7
我不确定,但我认为nvarchar 比varchar多使用一倍的空间来存储一个字符,而nvarchar (MAX) 可用于存储字符的最大内存数量是2 ^ 31-1 =>2147483647,因此2147483647/ 2等于1073741824。准确地说,这不是一个精确的数字。 - Francisco Javier Larios Soto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接