13

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

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

在 stackoverflow 上浏览时,我遇到了这个问题: 总是使用 nvarchar(MAX) 有什么缺点吗?

用户 mattruma 说他发现了varchar(max)在 SQL Server 2000 上使用的“困难方法”。

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

提前感谢您的帮助!

4

4 回答 4

17

VARCHAR(Max)是在 SQL Server 2005 中引入的,并且不适用于 SQL Server 2000。VARCHAR(8000)假设它足够大,您需要使用其中任何一个。否则你将需要使用TEXT

编辑

此外,如果您切换到VARCHAR(8000)记住,单行不能超过 8060 个字节是有限制的。因此,如果您填满一张varchar(8000)表格并有一堆其他大列,您将收到错误消息。这就是Text进来的地方。

Text具有性能影响,因为默认情况下它存储在单独的位置,并且它们在表中保留一个指针。有一个设置选项可以更改此行为,以便将文本类型保留在表格中,直到它们达到特定大小。如果您有大部分小斑点,则可能需要启用此功能。

于 2009-04-10T14:24:11.897 回答
11

varchar(MAX)如果您的实时数据库是不支持它们的 SQL Server 2000,那么这些限制听起来是一个有争议的问题。如果要存储的字符数超过 8K,则几乎只剩下另一个选项,即一TEXT列。但是,请注意TEXT列也有很多限制。

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

其他相关问题:

  • 无论您采用何种方式支持 Unicode, 我都建议您使用NTextor列。NVarchar
  • 如果该表有很多其他列,并且该varchar(8000)列很可能经常接近满,那么您可能会遇到 8K 的行限制问题。请记住这一点。
于 2009-04-10T14:29:41.867 回答
2

使用 TEXT 列。

于 2009-04-10T14:23:48.137 回答
0

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

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

于 2009-04-10T14:28:08.470 回答