1

nvarchar 字段需要多长时间才能更好地在 SQL Server 中使用文本字段?对于可能会或可能不会查询的文本内容,使用其中一种或另一种的一般指示是什么?

4

3 回答 3

7

据我了解,TEXT数据类型永远不应该在 SQL 2005+ 中使用。您应该开始使用VARCHAR(MAX)

看到这个关于VARCHAR(MAX)vs.的问题TEXT

更新(每条评论):

这个博客很好地解释了这些优势。取自:

但是当尝试查询它时,使用类型文本的痛苦就来了。例如,无法按文本类型分组。

使用文本类型的另一个缺点是增加了磁盘 IO,因为现在每条记录都指向一个 blob(或文件)。

因此,基本上,VARCHAR(MAX)将数据与记录一起保存,并让您能够像对待其他VARCHAR类型一样对待它,例如使用GROUP BY和字符串函数(LENCHARINDEX等)。

对于TEXT,您几乎总是必须将其转换VARCHAR为使用针对它的函数。

但是回到你关于效率的问题的根源,我认为使用TEXTVARCHAR(MAX). 查看此 MSDN 文章(搜索“数据类型”)TEXT已弃用,应替换为 VARCHAR(MAX)。

于 2011-05-12T03:44:33.150 回答
3

首先,根本不要使用文本。MSDN 说:

在 Microsoft SQL Server 的未来版本中,将删除 ntext、text 和 image 数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

varchar(max) 是您可能需要的。

如果您比较 varchar(n) 与 varchar(max),从技术上讲,它们是两种不同的数据类型(存储方式不同):

  • varchar(n) 值始终存储在行内。这意味着它不能大于最大行大小,并且行不能大于页面大小,即 8K。

  • varchar(max) 存储在行中。Row 有一个指向单独的 BLOB 页的指针。但是,在某些条件下 varchar(max) 可以将数据存储为常规行,显然它至少应该适合行大小。

因此,如果您的行可能大于 8K,则必须使用 varchar(max)。如果没有,使用 varchar(n) 可能会更可取,因为它比从外部页面检索行内数据更快。

MSDN 说

当列数据条目的大小变化很大并且大小可能超过 8,000 字节时,请使用 varchar(max)。

于 2011-05-12T04:13:15.990 回答
1

VARCHAR 优于 TEXT 的主要优点是您可以在其上运行字符串操作和字符串函数。使用 VARCHAR(max),现在您基本上有了一个很棒的大(不受限制)变量,您可以按照自己的意愿进行操作。

于 2011-05-12T03:50:08.437 回答