NVARCHAR(MAX) 的最大字符数是多少? [复制]

Posted

技术标签:

【中文标题】NVARCHAR(MAX) 的最大字符数是多少? [复制]【英文标题】:What is the maximum characters for the NVARCHAR(MAX)? [duplicate] 【发布时间】:2012-06-21 05:24:24 【问题描述】:

我在 SQL Server 2008 中声明了一个 NVARCHAR(MAX) 类型的列,它的确切最大字符长度是多少?

【问题讨论】:

【参考方案1】:

NVARCHAR(MAX) 类型的列的最大大小为 2 GB 存储空间。

因为NVARCHAR 每个字符使用 2 个字节,所以大约是。 10 亿个字符。

Leo Tolstoj 的战争与和平 是一本 1'440 页的书,包含大约 600'000 个字 - 所以可能是 600 万个字符 - 被四舍五入。因此,您可以在每个 NVARCHAR(MAX) 列中粘贴大约 166 份完整的战争与和平书。

足够的空间满足您的需求吗? :-)

【讨论】:

只是一个挑剔的选择。 NVARCHAR 对大多数字符使用 2 个字节。对于 U+00FFFF 以上的 unicode 字符。它将使用四个字节。 吹毛求疵:“存储大小是 n 字节 + 2 字节的两倍。” (Source) "一个常见的误解是认为 NCHAR(n) 和 NVARCHAR(n),n 定义了字符数。但是在 NCHAR(n) 和 NVARCHAR(n) 中,n 定义了字符串字节对中的长度" ([Source])(docs.microsoft.com/en-us/sql/t-sql/data-types/…)【参考方案2】:

默认情况下,nvarchar(MAX) 值的存储方式与 nvarchar(4000) 值完全相同,除非实际长度超过 4000 个字符;在这种情况下,行内数据将替换为指向存储数据的一个或多个单独页面的指针。

如果您预计数据可能超过 4000 个字符,nvarchar(MAX) 绝对是推荐的选择。

来源:https://social.msdn.microsoft.com/Forums/en-US/databasedesign/thread/d5e0c6e5-8e44-4ad5-9591-20dc0ac7a870/

【讨论】:

如果您的数据永远不会超过 4000 个字符,也不建议这样做,因为存在索引问题。 我认为这已经过时了。请参阅@marc_s 的回答。 嗨@FabioMilheiro,我能问一下哪个部分过时了。那是指针存储部分吗?【参考方案3】:

来自MSDN Documentation

nvarchar [ ( n | ma​​x ) ]

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

【讨论】:

【参考方案4】:

我认为实际上nvarchar(MAX) 可以存储大约 1070000000 个字符。

【讨论】:

你能解释一下你从哪里得到这个数字,以及你所说的“准确”是什么意思吗? (也就是说,您是说这不是硬性限制,但字符越多可能会出现问题?什么样的问题?为什么?) 我不确定,但我认为,如果 nvarchar 使用比 varchar 两倍的空间来存储 char ,并且 nvarchar(MAX) 可以用来存储 chars 的最大内存数是 2^ 31-1 => 2147483647,然后 2147483647/2 是 1073741824。准确地说,我的意思是这不是一个确切的数字。

以上是关于NVARCHAR(MAX) 的最大字符数是多少? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Unix 中主机名的最大字符数是多少?

linux下,某个端口允许最大的同时连接数是多少?

nvarchar(max) 仍然被截断

将 EF6 Code First 字符串流畅地设置为 nvarchar(max)

SQL的语句最大长度限制多少字符

NVARCHAR(MAX) 的最大长度