2011-08-03 85 views
2

MSDN has this to say关于这个问题:nvarchar(4001)?

nvarchar的[(N | MAX)]

可变长度Unicode字符数据。 ncan是一个从1到4,000的值。 max表示最大存储大小为2^31-1字节。存储大小(以字节为单位)是输入的字符数+ 2字节的两倍。输入的数据长度可以是0个字符。 nvarchar的ISO同义词是国家字符变化和国家字符变化。

这让我感到困惑。我可以将列定义为1 - 4000长,或2147483647长,但没有任何内容?我的理解是否正确?为什么我不能明确中间值?

回答

4

NVARCHAR(MAX)涵盖一切(不是只是 20亿字符)。如果您需要超过4000个字符,则数据肯定会脱离页面,因此就行为而言,如果您使用了4,001个字符,10,000个字符或10,000,000个字符,则无关紧要。它只占用你需要的空间,所以不要以为你在浪费(2 billion characters - the length of your actual string)

+0

+1 - 他也应该知道'MAX'意味着没有索引或约束。 – JNK

+1

那么,大于450的任何东西都会因索引的900byte限制而导致问题。 – spender

+0

@spender,只有当列需要作为索引中的关键字列参与时才相关。你的陈述似乎意味着没有人应该声明一个'NVARCHAR(> 450)'? –

1

由于4000个字符或更少的字符在存储方面具有一种行为,MAX在存储方面具有其他行为。你真的不想开始强制字符串长度计算对于1M字符长的东西吗?我目前的理解是,最多可将4000个字符存储在表格中,并将MAX存储在表格外。

另外NVARCHAR(MAX)和VARCHAR(MAX)是文本和ntext的替代品。

+0

仅供参考,您可以明确指定MAX在可能的情况下存储在行内。 –

2

Max将接受4001和1073741823之间的值(记住存储大小约为实际字符串的长度的两倍)。

限制基本上是任何超过4000个字符必须是MAX