我正在使用 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 结构中,并且表将仅保存一个指针