【问题标题】:varchar(max) MS SQL Server 2000, problems?varchar(max) MS SQL Server 2000,有问题吗?
【发布时间】:2009-04-10 14:19:34
【问题描述】:

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

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

在 stackoverflow 上浏览时,我遇到了这个问题: Are there any disadvantages to always using nvarchar(MAX)?

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

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

提前感谢您的帮助!

【问题讨论】:

    标签: sql sql-server varchar


    【解决方案1】:

    VARCHAR(Max) 是在 SQL Server 2005 中引入的,并且不适用于 SQL Server 2000。您需要使用 VARCHAR(8000) 之一,前提是它足够大。否则你需要使用TEXT

    编辑

    此外,如果您切换到VARCHAR(8000),请记住单行不能超过 8060 字节的限制。因此,如果您填写 varchar(8000) 表并有一堆其他大列,您将收到错误。这就是Text 的用武之地。

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

    【讨论】:

    • 我们不得不切换到 VARCHAR(8000)。
    【解决方案2】:

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

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

    其他相关问题:

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

    【讨论】:

      【解决方案3】:

      使用 TEXT 列。

      【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • nvarchar(4000) 你的意思是?还是 varchar(8000)?
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2011-12-20
      • 2011-04-24
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多