使用 SQL varchar(max) 或文本?

使用 SQL varchar(max) 或文本?

我正在使用 SQL Server 2005,并且我有一个需要存储大量文本的列(有时超过 8000 个字符,即 varchar 的限制)。使用“text”数据类型有什么缺点吗?我还阅读了有关使用 varchar(MAX) 的信息——如果存储在其中的大部分数据少于 8000 个字符,但我需要能够支持更多字符,那么这会更好吗?

答案1

只要您可能拥有超过 8000 字节的数据,您就应该始终选择 2005 中的新 LOB 类型,而不是传统类型(text、ntext、image)。

新类型可与大多数固有字符串操作函数配合使用,而旧类型则不行。它们以完全相同的方式存储在数据库中,但对新类型的读取算法也进行了一些小调整。

但有一些事情需要注意:

  • 默认情况下,旧类型存储在行外,这意味着无论数据大小如何,都会有一个随机 IO 来获取数据。当然,您可以使用“文本行内”选项更改此设置
  • 新类型存储默认情况下,最多 8000 字节,只要记录中有空间。这减少了使用随机 IO 来获取值的机会,但会使数据记录更长,从而导致其他问题。您可以通过更改 large-values-types-off-row 选项来更改数据是存储在行内还是行外
  • 只要您的表定义中有新的或旧的 LOB 类型,就意味着该表的聚集索引无法使用企业版中的在线索引操作。

我发表了一篇博客文章,更详细地讨论了这个问题http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-choosing-the-right-LOB-storage-technique.aspx

希望这可以帮助

答案2

使用 varchar(max),这是今后推荐的方法,因此它可以节省您的升级问题,而且比使用文本数据类型更容易。

答案3

使用 varchar(MAX)。varchar(MAX) 的限制为 2GB。

如果内容少于 8,000 字节,它将以内联方式存储。但是,如果内容大于 8,000 字节,它将像文本字段一样存储在 LOB 中。

此外,TEXT、NTEXT 和 IMAGE 数据类型将来会被弃用。

参考

答案4

varchar(最大)

  • 2GB 限制,或 2^31 个字符
  • 如果小于 8000 字节,则将以内联方式存储
  • 如果 > 8000 使用 LOB 存储

文本

  • 2,147,483,647 个字符
  • 此项已被弃用,取而代之的是 varchar(max)
  • 表将文本值存储在 LOB 结构中,并且表将仅保存一个指针

相关内容