varchar(max)在MS SQL Server 2000中存在问题吗?

13

我继承了一个使用SQL Server 2000作为后端的asp.net网站项目。

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

在stackoverflow上浏览时,我看到这篇文章:Are there any disadvantages to always using nvarchar(MAX)?

用户mattruma说他通过在SQL Server 2000上使用varchar(max)而吃了亏。

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

非常感谢您提供的任何帮助!

4个回答

17

VARCHAR(Max)在SQL Server 2005中引入,不支持SQL Server 2000。您需要使用VARCHAR(8000),假设它足够大。否则,您将需要使用TEXT

编辑

另外,如果您切换到VARCHAR(8000),请记住单行不能超过8060字节的限制。因此,如果您填满一个VARCHAR(8000)表并且有一堆其他的大列,您将会收到错误提示。这就是TEXT派上用场的地方。

TEXT对性能有影响,因为默认情况下它存储在单独的位置,并在表中保留指针。有一种设置选项可以更改此行为,使文本类型保留在表中,直到达到某个大小。如果您大多数是小型BLOB,则可能希望启用此功能。


我们不得不切换到VARCHAR(8000)。 - mattruma

11

如果您的实时数据库是SQL Server 2000,不支持varchar(MAX),那么这个限制似乎就没有意义了。如果您有超过8K个字符需要存储,那么您几乎只能选择另一种选项,即使用TEXT列。但是要注意TEXT列也有很多限制。

例如,您不能轻松地对它们进行排序或分组,也不能将它们与其他列进行等值比较。也就是说,您不能使用 Select * from mytable where Mytext1 = mytext2 这样的语句。

其他相关问题:

  • 我建议无论您采取哪种方式,都应该使用NTextNVarchar列来支持Unicode。
  • 如果表中有很多其他列,并且varchar(8000)列很可能经常接近满,那么您可能会遇到8K行限制的问题。也要记住这一点。

2
使用 TEXT 列。

如果您使用文本字段,可能会妨碍对该字段进行搜索。 - TheTXI
@TheTXI - OP的问题中没有任何与在该列上搜索相关的内容。 - Otávio Décio
我不建议使用TEXT数据类型,因为它将在未来的Microsoft SQL Server版本中被移除。 - Ryan Gates

0
这取决于您的需求。您可以使用TEXT列而不是VARCHAR(MAX),但必须确保您的实现不需要在该字段上进行搜索,因为您无法对TEXT和NTEXT字段进行类似比较的操作。
如果您可以将自己限制在8000个字符以内,我建议使用VARCHAR(8000)列来存储信息。

你是指nvarchar(4000)吗?还是varchar(8000)? - gbn

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