varchar(max)MS SQL Server 2000,有问题吗?

varchar(max) MS SQL Server 2000, problems?

我继承了一个asp.net网站项目,该项目当前运行SQL Server 2000作为其后端。

我一直在使用SQL Server 2005 Express在数据库的本地副本上进行一些数据库更改。 我已经使用varchar(max)列创建了一个表。 它们用于存储任意长度的XHTML片段。

浏览stackoverflow时,我遇到了以下问题:
始终使用nvarchar(MAX)有什么缺点吗?

用户mattruma说,他发现了在SQL Server 2000上使用varchar(max)的"艰难方法"。

鉴于实时数据库在SQL Server 2000上运行,我应该使用什么代替varchar(max)

在此先感谢您的帮助!


VARCHAR(Max)在SQL Server 2005中引入,在SQL Server 2000上不起作用。您需要使用VARCHAR(8000)中的任何一个,前提是这足够大。否则,您将需要使用TEXT

编辑

另外,请记住,如果切换到VARCHAR(8000),则有一个限制,即单行不能超过8060字节。因此,如果填写VARCHAR(8000)表并有一堆其他大列,则会出现错误。这是TEXT出现的地方。

TEXT具有性能含义,因为默认情况下它存储在单独的位置,并且它们将指针保存在表中。有一个set选项可以更改此行为,以便将文本类型保留在表中,直到达到一定大小为止。如果您的Blob大多很小,则可能需要启用它。


如果您的实时数据库是不支持这些限制的SQL Server 2000,那么听起来像VARCHAR(Max)限制是一个有争议的问题。如果要存储的字符数超过8K,则剩下的唯一选择就是TEXT列。但是,请注意TEXT列也有很多限制。

例如,您不能轻松地对它们进行排序或分组,也无法将它们与其他列进行等效性比较。那就是你不能说Select * from mytable where Mytext1 = mytext2

其他相关问题:

  • 无论您要支持Unicode的方式如何,我建议使用NTextNVarchar列。
  • 如果表中还有许多其他列,并且VARCHAR(8000)列可能经常接近于满,则行限制为8K可能会出现问题。也请记住这一点。


使用文本列。


这取决于您的需求。您可以使用TEXT列而不是VARCHAR(MAX),但是必须确保您的实现无需在该字段上进行搜索,因为您无法像在TEXT和NTEXT字段上进行比较一样。

如果您可以限制为8000个字符,则可以使用VARCHAR(8000)列来存储信息。