为nvarchar(4001)?

时间:2011-08-03 16:37:43

标签: sql sql-server tsql sql-server-2008

关于这个主题的

MSDN has this to say

  

nvarchar [(n | max)]

     

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

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

3 个答案:

答案 0 :(得分:4)

NVARCHAR(MAX)涵盖其他所有内容(不是 20亿个字符)。如果您需要超过4,000个字符,那么数据肯定会在页外,所以就行为而言,如果您使用了4,001个字符,10,000个字符或10,000,000个字符并不重要。它只占用你需要的空间,所以不要以为你在浪费(2 billion characters - the length of your actual string)

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

NVARCHAR(MAX)和VARCHAR(MAX)也是text和ntext的替代品。