当所需长度<8000 时,TEXT 比 varchar 有啥优势?

Posted

技术标签:

【中文标题】当所需长度<8000 时,TEXT 比 varchar 有啥优势?【英文标题】:what advantage does TEXT have over varchar when required length <8000?当所需长度<8000 时,TEXT 比 varchar 有什么优势? 【发布时间】:2011-10-27 04:05:34 【问题描述】:

SQL Server Text type vs. varchar data type:

根据经验,如果您需要文本值超过 200 字符 AND 不要在此列上使用连接,使用 TEXT。

否则使用 VARCHAR。

假设我现在的数据是 4000 个字符,并且我不在此列上使用连接。通过该引用,与使用 varchar(4000) 相比,使用 TEXT/varchar(max) 更有利。

为什么会这样? (在这种情况下,TEXT/varchar(max) 比普通的 varchar 有什么优势?)

【问题讨论】:

这有关系吗?这些天来,我会说你应该使用 VARCHAR(MAX) 而不是 TEXT 。您是在谈论特定版本的 SQL Server 吗? @Matt Gibson 嘿,我已经添加了 varchar(max) 部分。我不是在谈论特定版本,但如果需要,2008 年 【参考方案1】:

TEXT 已弃用,请改用 nvarchar(max)varchar(max)varbinary(max):http://msdn.microsoft.com/en-us/library/ms187993.aspx

【讨论】:

顺便说一句,我将 TEXT/varchar(max) 与 normal varchar 进行比较,而不是 TEXT 与 varchar(max) 简短的回答是:视情况而定! 请更具体。这取决于什么?【参考方案2】:

我不同意 200 的说法,因为它没有被解释,除非它与已弃用的 "text in row" option 相关

如果您的数据是 4000 个字符,则使用 char(4000)。它是固定长度的 不推荐使用文本 BLOB 类型速度较慢

【讨论】:

我认为他的意思不是“我的数据总是正好 4000 个字符”,而是他的意思是最多可以有 4000 个字符。如果是这样,我不建议使用 char(x)。此外,如果“BLOB 类型”的意思是“图像”,那么它也已被弃用。 @Nux:BLOB 类型也包括最大类型【参考方案3】:

在旧版本的 SQL(2000 和更早版本?)中,最大行长度为 8 KB(或 8060 字节)。如果您将 varchar 用于大量长文本列,它们将包含在此长度中,而任何文本列都不会,因此您可以在一行中保留更多文本。

此问题已在较新版本的 SQL 中得到解决。

This MSDN page 包含以下语句:

SQL Server 2005 支持行溢出存储,它启用了变量 长度列被推离行。只有一个 24 字节的根存储在 可变长度列的主记录被推出行;因为 其中,有效行限制高于以前的版本 SQL Server 的。有关详细信息,请参阅“行溢出数据 SQL Server 2005 联机丛书中的“超过 8 KB”主题。

【讨论】:

@Mitch,是的! - 称之为星期一早上的雾

以上是关于当所需长度<8000 时,TEXT 比 varchar 有啥优势?的主要内容,如果未能解决你的问题,请参考以下文章

当所需的文本框为空时,如何强制页面回发

当所需的触摸次数超过一次时,如何获得 UILongPressGestureRecognizer 的触摸位置?

当所包含的react元素具有箭头函数事件处理程序时,如何使用.contains(nodeOrNodes)API?

unity中计算ugui中Text控件的所需长度

Sqlserver 报错“参数数据类型 ntext/text 对于 replace 函数的参数 1 无效”的解决方案及原理分析扩展

ArrayList扩容源码详细解读(JDK1.8)