MySQL 中的 VARCHAR 与 TEXT

发布于 2024-11-16 07:40:43 字数 347 浏览 1 评论 0 原文

我有两个字段:一个用于存储最大长度为 500 个字符的摘录,另一个用于存储最大长度为 10,000 个字符的描述

我应该使用什么数据类型,TEXT 还是 VARCHAR?为什么?

MySQL 5.0.3 之后,VARCHAR 接受约 65000 个字符。但这并不能说明为什么我应该使用一种类型和/或另一种类型。

我认为我应该使用 VARCHAR 作为摘录,因为我可以指定大小限制,并使用 TEXT 作为 description 字段,因为它更大。

I have two fields: one to store an excerpt with a max size of 500 characters, and another to store a description with a max size of 10,000 characters.

What data types should I use, TEXT or VARCHAR? And why?

After MySQL 5.0.3 VARCHAR accepts ~65000 characters. But this does not tell why I should use one type and or the other.

I'm reasoning that I should use VARCHAR for the excerpt because I can assign a size limit, and TEXT for the description field as it's larger.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半夏半凉 2024-11-23 07:40:43

VARCHAR 的存储方式与 InnoDBTEXT/BLOB 字段的存储方式相同(我假设您用于事务性、引用完整性和崩溃恢复,对吧?) - 也就是说,在磁盘上表的其余部分的外部(可能需要另一个磁盘读取来检索)。

从存储角度来看BLOB,TEXT为
以及长 VARCHAR 的处理方式相同
通过 Innodb 的方式。这就是为什么 Innodb
手册称其为“长列”
比 BLOB。

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

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

A long VARCHAR is stored in the same manner as a TEXT/BLOB field in InnoDB (which I assume you're using for transactionality, referential integrity and crash recovery, right?) - that is, externally to the rest of the table on disk (which may require another disk read to retrieve).

From storage prospective BLOB, TEXT as
well as long VARCHAR are handled same
way by Innodb. This is why Innodb
manual calls it “long columns” rather
than BLOBs.

source

Unless you need to index these columns (in which case VARCHAR is much faster) there is no reason to use VARCHAR over TEXT for long fields - there are some engine specific optimisations in MySQL to tune the data retrieval according to length, and you should use the correct column type to take advantage of these.

In case you're using MyISAM an in-depth discussion on the topic is here.

要走就滚别墨迹 2024-11-23 07:40:43

VARCHARTEXT 之间的一个区别是,您可以为 VARCHAR 列声明 DEFAULT 子句,但不能为 VARCHAR 列声明 DEFAULT 子句。 TEXT 列。

@Andy 是正确的,InnoDB 在内部以相同的方式存储 VARCHAR 和 TEXT 。

VARCHARTEXT 均支持 FULLTEXT 索引。在5.6之前,必须使用MyISAM来获取该类型的索引。在MySQL 5.6中,它终于支持InnoDB中的FULLTEXT。尽管您应该仔细测试它,因为它似乎 返回与 MyISAM 中的实现不同的结果

然而,Sphinx Search 比 MySQL 中的任一实现更快、功能更丰富。请参阅全文搜索抛出中的概述。

@穆罕默德问:

什么时候 VARCHAR 被视为 LONG VARCHAR?有人物门槛吗?

如果您声明的长度最多为 255 个字节,则它可以使用一个字节对给定字符串的长度进行编码。如果您声明列最大长度超过 255 个字节,它将使用两个字节来编码长度。

您可以将列声明为LONG VARCHAR,但这实际上只是中等文本

mysql> create table test ( l long varchar);

mysql> show create table test\G

CREATE TABLE `test` (
  `l` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=latin1

One difference between VARCHAR and TEXT is that you can declare a DEFAULT clause for a VARCHAR column, but not for a TEXT column.

@Andy is correct that InnoDB stores both VARCHAR and TEXT in the same way internally.

FULLTEXT indexes are supported on both VARCHAR and TEXT. Prior to 5.6, you must use MyISAM to get that type of index. In MySQL 5.6, it finally supports FULLTEXT in InnoDB. Though you should test it carefully, because it seems to return different results than the implementation in MyISAM.

However, Sphinx Search is faster and richer in features than either implementation in MySQL. See my overview in Full-Text Search Throwdown.

@Mohammed asked:

when does VARCHAR become considered LONG VARCHAR? Is there a character threshold?

If you declare a length of up to 255 bytes, it can encode the length of a given string using one byte. If you declare the column max length over 255 bytes, it will use two bytes to encode the length.

You can declare a column as LONG VARCHAR, but this is really just an alias for MEDIUMTEXT.

mysql> create table test ( l long varchar);

mysql> show create table test\G

CREATE TABLE `test` (
  `l` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=latin1
日记撕了你也走了 2024-11-23 07:40:43

如果您的内容适合 varchar 列,则使用 varchar。

Varchar 数据存储在每一行中。文本数据作为 blob 存储在表外部。

根据此测试,varchar 比文本快大约三倍。

If your content fits in a varchar column then use varchar.

Varchar data is stored in each row. Text data is stored as blobs outside of the table.

According to this test, varchar is about three times faster than text.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文