AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 13141
Accepted
Austin
Austin
Asked: 2009-05-28 09:26:34 +0800 CST2009-05-28 09:26:34 +0800 CST 2009-05-28 09:26:34 +0800 CST

使用 SQL varchar(max) 还是 text?

  • 772

我正在使用 SQL Server 2005,并且我有一列需要存储大量文本(有时超过 8000 个字符,即 varchar 限制)。使用“文本”数据类型有缺点吗?我还阅读了有关使用 varchar(MAX) 的信息——如果我存储在其中的大部分数据少于 8000 个字符,那会更好,但我需要能够支持更多?

sql-server-2005 sql
  • 5 5 个回答
  • 8607 Views

5 个回答

  • Voted
  1. Best Answer
    Paul Randal
    2009-05-28T09:34:15+08:002009-05-28T09:34:15+08:00

    只要您有超过 8000 字节的数据潜力,您就应该始终选择 2005 年的新 LOB 类型,而不是旧类型(text、ntext、image)。

    新类型适用于大多数内部字符串操作函数,而旧类型则不适用。它们以完全相同的方式存储在数据库中,但也有一些小的调整来读取新类型的算法。

    不过有一些事情需要注意:

    • 传统类型默认存储在行外,这意味着无论数据大小如何,都有一个随机 IO 来获取数据。您当然可以使用“文本行内”选项更改它
    • 新类型默认存储在行上,最多 8000 字节限制,只要记录中有空间。这减少了使用随机 IO 获得值的机会,但会使您的数据记录更长,从而导致其他问题。您可以通过更改 large-values-types-off-row 选项来更改数据是存储在行内还是行外
    • 任何时候您的表定义中有新的或旧的 LOB 类型都意味着表的聚集索引不能利用企业版中的在线索引操作。

    我在http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-choosing-the-right-LOB-storage-technique.aspx上发布了一篇博文,更详细地讨论了这一点。

    希望这可以帮助

    • 14
  2. Bravax
    2009-05-28T09:35:19+08:002009-05-28T09:35:19+08:00

    使用 varchar(max),这是推荐的方法,因此它可以为您节省升级问题,并且使用文本数据类型也更容易。

    • 2
  3. Jimmie R. Houts
    2009-05-28T09:35:44+08:002009-05-28T09:35:44+08:00

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

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

    此外,TEXT、NTEXT 和 IMAGE 数据类型将在未来的某个时候被弃用。

    参考

    • 1
  4. Steve Jones
    2009-05-28T10:45:13+08:002009-05-28T10:45:13+08:00

    MVP Simon Sabin 在他的博客上发表了一些不错的博客文章。搜索 Simon Sabin varchar(max)

    我同意 Paul 的观点,尽可能使用 varchar(max)。

    • 0
  5. Tom S
    2009-08-20T06:07:46+08:002009-08-20T06:07:46+08:00

    varchar(最大值)

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

    文本

    • 2,147,483,647 个字符
    • 这已被弃用,有利于 varchar(max)
    • 表将文本值存储在 LOB 结构中,表将只保存一个指针
    • 0

相关问题

  • SQL Server - 集群与镜像的高可用性?

  • SQL Server - 强制数据库在内存中?

  • 如何为 Microsoft SQL Server 2005 自动运行夜间备份?

  • 什么被认为对 sql server 安全性更安全

  • 如何从 SQL Server 2005 迁移到 2008

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve