【问题标题】:When to use TEXT in mysql instead of VARCHAR [duplicate]何时在 mysql 中使用 TEXT 而不是 VARCHAR [重复]
【发布时间】:2012-07-11 14:41:45
【问题描述】:

可能重复:
MySQL: Large VARCHAR vs. TEXT?

既然VARCHAR 现在可以有65k 字节,那么什么时候应该使用TEXT 而不是VARCHAR

【问题讨论】:

  • 当您需要超过 65k 个字符时。 :)
  • 我认为应该是 65k 字节,而不是字符
  • 哦,是的。 65k 字节。更新了我的问题。

标签: mysql


【解决方案1】:

文本应该用于非常长的不确定长度的字符串。此外,返回 TEXT 字段的查询往往比对应的 VARCHAR 慢得多。

【讨论】:

  • 在我的数据库中,我有一个名为 Description 的列。数据类型应该是 VARCHAR 还是 TEXT?我不确定描述数据的长度,但我计划在前端设置字数限制,以便它具有最大长度。
【解决方案2】:

VARCHAR 的存储方式与 InnoDB 中的 TEXT/BLOB 字段相同。

从存储准 BLOB、TEXT 为 以及只要 VARCHAR 处理相同 通过 Innodb 的方式。这就是为什么 Innodb 手册称它为“长列”而不是 比 BLOB。

source

除非您需要索引这些列(在这种情况下,VARCHAR 更快)没有理由使用 VARCHAR 而不是 TEXT 用于长字段 - MySQL 中有一些特定于引擎的优化来调整根据长度检索数据,您应该使用正确的列类型来利用这些。

如果您使用的是MyISAM,则有关该主题的深入讨论是here


TEXTBLOB 存储在表外,表中只有一个指向实际存储位置的指针。

VARCHAR 与表内联存储。 VARCHAR 在大小合理时会更快。

根据this testVARCHAR 的速度大约是文本的三倍。

【讨论】:

  • 定义“长字段”。
  • @PaulBrewczynski > 768 字节(参见 Lion 发布的链接)
  • 对 InnoDB 的一个更正:仅当“long”(> 768 字节)时,TEXT 和 BLOB 才从表中存储在 InnoDB 中,并且只有尾部存储在表外(类似于 VARCHAR)。真正的区别在于最大长度不同,而对于 VARCHAR,您必须提供最大长度(与 65k 的系统限制一起强制执行)。
  • 啊,应该知道数据类型会影响性能
  • 更新:自编写此答案以来,在 InnoDB 中创建了更多 ROW_FORMATs,并且 767 限制已增长到大约 3K。底线:经过“几个”KB,VARCHARTEXT 的处理方式相同。
猜你喜欢
  • 2011-02-03
  • 2010-11-18
  • 2011-01-02
  • 2014-10-07
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多