我正在使用sql Server 2005,我有一个列,我需要存储大量文本(有时超过8000个字符,varchar限制).使用“文本”数据类型是否有缺点?我还读到了使用varchar(MAX) – 如果我存储的大部分数据少于8000个字符会更好,但我需要能够支持更多吗?
解决方法
只要你有超过8000字节的数据潜力,你应该总是在2005年寻找新的LOB类型而不是遗留类型(text,ntext,image).
新类型适用于大多数内部字符串操作函数,而旧类型则不适用.它们以完全相同的方式存储在数据库中,但也有一些小的调整来读取新类型的算法.
但有一些事情需要注意:
>默认情况下,遗留类型存储在行外,这意味着无论数据大小如何,都有一个随机IO来获取数据.您当然可以使用“text in-row”选项更改此设置
>默认情况下,新类型存储在ON行中,最多可达8000字节限制,只要记录中有空格即可.这样可以降低使用随机IO获取值的机会,但会使您的数据记录更长,从而导致其他问题.您可以通过更改large-values-types-off-row选项来更改数据是存储在行内还是行外
>如果表定义中有新的或旧的LOB类型,则意味着表的聚簇索引无法在Enterprise Edition中使用联机索引操作.
我发布了一篇博文,在http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-choosing-the-right-LOB-storage-technique.aspx更详细地讨论了这个问题.
希望这可以帮助