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 | max ) ]
可变长度的 Unicode 字符串数据。 n 定义字符串长度,可以是 1 到 4,000 之间的值。 max 表示最大存储大小为 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) 的最大字符数是多少? [复制]的主要内容,如果未能解决你的问题,请参考以下文章