使用SQL varchar(max)或文本?

我正在使用SQL Server 2005,我有一个列需要存储大量的文本(有时超过8000个字符,varchar限制)。 使用“文本”数据types有缺点吗? 我还读了关于使用varchar(MAX) – 如果我存储在那里的大多数数据less于8000个字符,那会更好吗,但是我需要能够支持更多?

只要您有超过8000字节的数据的可能性,您应该始终在2005年使用新的LOBtypes,而不是旧types(文本,ntext,图像)。

新types与大多数内部string操作函数一起工作,而传统types则不适用。 它们以同样的方式存储在数据库中,但也有一些小的改动来读取新types的algorithm。

有一些事情要注意,但是:

  • 遗留types默认存储在行外,这意味着无论数据大小如何,都有一个随机IO来访问数据。 你当然可以用“文本行”选项来改变它
  • 新的types默认存储在行上,最多8000字节的限制,只要logging中有空间。 这减less了随机IO获得数值的机会,但使数据logging更长,导致其他问题。 您可以通过更改large-values-types-off-row选项来更改数据是以行还是以行方式存储的
  • 任何时候在表定义中有一个新的或旧的LOBtypes意味着该表的聚簇索引不能使用Enterprise Edition中的联机索引操作。

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

希望这可以帮助

使用varchar(max),这是推荐的方法,所以它可以节省你升级的问题,而且使用文本数据types也更容易。

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

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

另外,TEXT,NTEXT和IMAGE数据types将在未来某个时候被弃用。

参考

MVP Simon Sabin在博客上发表了一些很好的博客文章。 searchSimon Sabin varchar(max)

我同意保罗,尽可能使用varchar(max)。

VARCHAR(最大值)

  • 2GB的限制,或2 ^ 31个字符
  • 如果<8000字节,它将被内联存储
  • 如果> 8000使用LOB存储

文本

  • 2,147,483,647个字符
  • 这是不赞成使用varchar(max)
  • Table将文本值存储在LOB结构中,并且该表只包含一个指针