SQL Server 2000中varchar(max)的最大大小

13

我想了解SQL Server 2000中varchar的最大长度是多少。在我进行谷歌搜索时,有些地方写到它最多可以容纳8000个字符,而有些地方却写到它最多可以容纳8060个字节。哪一个是正确的呢?

4个回答

24

@Kumar:是的,对于VARCHAR,一个字符等于1个字节;对于NVARCHAR,一个字符等于2个字节。 - marc_s
1
这比那要复杂一些。简短的版本是,varchar和nvarchar在实际放置数据之前不会使用空间。 - Joel Coehoorn
今天刚被点赞了。如果您还在担心 Sql Server 2000,那么您应该知道,距离官方停止支持这个版本的 Sql Server(2013年4月9日)不到3个月了。在此之后,即使是重要的安全问题也将不再得到修复。您应该认真考虑尽快迁移到当前版本的 Sql Server。 - Joel Coehoorn

11

SQL Server的数据页大小为8k: 8192字节。其中一部分被保留作为页面标题,剩下的8060字节是单个行可以拥有的最大长度。在行中,varbinary(n),varchar(n)和nvarchar(n)类型不能超过8000字节,这意味着varchar(8000)是Ascii最大长度,nvarchar(4000)是Unicode最大长度(因为Unicode将每个字符存储在2个字节上)。

所有这些细节的最佳解释来自存储引擎内部:页面解剖


1
小贴士:Unicode 并不将每个字符都存储在 2 个字节中,这取决于编码方式。UTF-8 和 UTF-16 是可变长度编码,我所知道的唯一固定大小的编码是 UTF-32。还存在其他编码(如 UCS-2、UTF-7)。在内部,微软通常使用 UTF-16,其中字符的默认大小为 2 个字节。这对于至少所有基于 .NET 的产品和 SQL Server 都是正确的。 - Abel
@abel:SQL Server使用UCS-2LE编码,每个字符正好为2个字节。但我同意帖子中所述的“Unicode”并不严格每个字符都是2个字节。 - Remus Rusanu
是的,你在 UCS-2 上是正确的,我经常忘记这一点,这是我最大的抱怨之一,因为它只允许 BMP 字符。谢谢指出 :) - Abel

2
据我所记,它是8000个字符。对于Nvarchar类型,它是4000个字符。

@Kumar:是的! 对于 varchar,1个字符=1个字节,对于 nvarchar,1个字符=2个字节。 - marc_s

2

varchar(max)的最大尺寸很大(我认为是2GB或2Gchars)。您可以为varchar(n)指定的n的最大值为8000,而对于nvarchar,则为4000。


你说得对,但问题就不存在了。我的回答的第二部分仍然成立。 - erikkallen

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