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

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

在 stackoverflow 上浏览时,我发现了这个:始终使用 nvarchar(MAX) 有什么缺点吗?

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

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

预先感谢您的任何帮助!

有帮助吗?

解决方案

听起来像是 varchar(MAX) 如果您的实时数据库是不支持这些限制的 SQL Server 2000,那么这些限制就没有实际意义了。如果您要存储超过 8K 的字符,您几乎只剩下唯一的其他选择,即 TEXT 柱子。但是,请注意 TEXT 列也有很多限制。

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

其他相关问题:

  • 我建议使用 NText 或者 NVarchar 无论你采用哪种方式,列都支持 Unicode。
  • 如果表有很多其他列并且 varchar(8000) 列可能经常接近满,您可能会遇到 8K 行限制的问题。也请记住这一点。

其他提示

VARCHAR(Max)在SQL Server 2005中引入的,并不会SQL Server 2000中,您需要为使用VARCHAR(8000)假设,这将是足够大的工作。否则,你将需要使用TEXT

修改

此外,如果您切换到VARCHAR(8000)记住有一个单行不能有更多然后8060个字节的限制。所以,如果你填写一份表格varchar(8000)并有一大堆其他大柱,你会得到一个错误。这是Text用武之地。

Text具有性能含义,因为默认情况下它被存储在一个单独的位置,并且它们保持一个指针在表中。有这么文本类型保存在表中,直到他们达到一定的规模,其改变此行为的设置选项。如果你有大多是小斑点你可能要启用这个功能。

使用一个TEXT列。

这要看你的需求。您可以使用文本列而不是VARCHAR(MAX),但你必须确保你的实现并不需要在该领域的搜索,因为你不能做到像文本和NTEXT领域的比较。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top