首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server文本类型与varchar数据类型

SQL Server文本类型与varchar数据类型
EN

Stack Overflow用户
提问于 2009-02-19 10:53:42
回答 4查看 457.2K关注 0票数 300

我有可变长度的字符数据,并希望存储在SQL Server (2005)数据库中。我想了解一些关于如何选择TEXT SQL类型或选择VARCHAR SQL类型的最佳实践,以及性能/内存占用/函数的优缺点。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-19 11:13:04

如果您使用的是SQL Server2005或更高版本,请使用varchar(MAX)text数据类型已弃用,不应用于新的开发工作。来自the docs

重要

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

票数 228
EN

Stack Overflow用户

发布于 2009-02-19 11:07:59

TEXT用于大块字符串数据。如果字段长度超过某个阈值,则文本将被存储在行外。

VARCHAR始终以行的形式存储,且不超过8000个字符。如果您尝试创建一个VARCHAR(x),其中x> 8000,则会得到一个错误:

服务器:消息131,级别15,状态3,行1

赋予类型“varchar”的大小()超过了任何数据类型允许的最大值(8000)

这些长度限制与SQL Server2005中的VARCHAR(MAX)无关,SQL Server2005可以像TEXT一样存储在行外。

注意,MAX在这里不是一种常量,VARCHARVARCHAR(MAX)是非常不同的类型,后者非常接近TEXT

在以前的SQL Server版本中,您不能直接访问TEXT,只能获取TEXTPTR并在READTEXTWRITETEXT函数中使用它。

在SQL Server2005中,可以直接访问TEXT列(尽管仍然需要显式转换为VARCHAR来为它们赋值)。

TEXT很好:

  • 如果您需要在数据库中存储大文本
  • 如果您不搜索列的值
  • 如果您很少选择此列并且不连接它。

VARCHAR很好:

如果您存储小字符串,请执行

  • 如果您在字符串值上搜索

  • ,如果您始终选择它或在连接中使用它。

通过选择此处,我的意思是发出任何返回该列的值的查询。

这里的搜索是指发出其结果取决于TEXTVARCHAR列的值的任何查询。这包括在任何JOINWHERE条件下使用它。

由于TEXT存储在行外,因此不涉及TEXT列的查询通常会更快。

以下是TEXT优势的一些示例:

  • 博客comments
  • Wiki pages
  • 代码源代码

以下是VARCHAR优势的一些示例:

  • Usernames
  • Page titles
  • Filenames

根据经验,如果您需要文本值超过200个字符,不要对此列使用join,请使用TEXT

否则,请使用VARCHAR

附注:同样的情况也适用于支持UNICODENTEXTNVARCHAR,您应该在上面的示例中使用它们。

附注:这同样适用于SQL Server 2005+使用的VARCHAR(MAX)NVARCHAR(MAX),而不是TEXTNTEXT。如果您希望它们始终存储在行外,则需要使用sp_tableoption为它们启用large value types out of row

正如上面提到的和,TEXT将在未来的版本中被弃用:

SQL Server的未来版本中将删除text in row选项。避免在新的开发工作中使用此选项,并计划修改当前使用text in row的应用程序。建议您使用varchar(max)nvarchar(max)varbinary(max)数据类型存储大型数据。要控制这些数据类型的行内和行外行为,请使用large value types out of row选项。

票数 292
EN

Stack Overflow用户

发布于 2009-02-19 11:18:48

在SQL server2005中引入了新的数据类型:varchar(max)nvarchar(max),它们具有旧的text类型的优点:它们可以包含op到2 2GB的数据,但它们也具有varcharnvarchar的大部分优点。这些优点之一是能够使用字符串操作函数,如substring()。

此外,varchar(max)存储在表的(磁盘/内存)空间中,而大小小于8Kb。只有当您在字段中放置更多数据时,这些数据才会存储在表的空间之外。(通常)检索存储在表空间中的数据的速度更快。

简而言之,永远不要使用文本,因为有一个更好的选择:(n)varchar(max)。并且仅当常规的varchar不够大时才使用varchar(max),即如果您期望要存储的字符串超过8000个字符。

如前所述,您可以对TEXT数据类型使用SUBSTRING,但前提是文本字段包含的字符少于8000个字符。

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/564755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档