MySQL中的VARCHAR与TEXT

Moh*_*mad 20 mysql database datafield

我有两个字段:一个用于存储excerpt最大为500个字符的字段,另一个用于存储description最大为10,000个字符的字段.

我应该使用哪些数据类型,TEXT或者VARCHAR?为什么?

在MySQL 5.0.3 VARCHAR之后接受~65000个字符.但这并没有说明为什么我应该使用一种类型或另一种类型.

我的推理,我应该使用VARCHAR的摘录,因为我可以指定一个大小的限制,并TEXTdescription外地,因为它的大.

And*_*ndy 14

long VARCHAR以与TEXT/ BLOBfield 相同的方式存储InnoDB(我假设你用于事务性,参照完整性和崩溃恢复,对吗?) - 也就是说,在磁盘上其余表的外部(可能需要)另一个磁盘读取检索).

从存储预期BLOB,TEXT以及长VARCHAR由Innodb以相同的方式处理.这就是为什么Innodb手动将其称为"长列"而不是BLOB.

资源

除非你需要索引这些列(在这种情况下VARCHAR要快得多),没有理由使用VARCHARTEXT的长字段-有一些发动机比的优化MySQL调整数据检索根据长度,你应该使用正确的列类型利用这些.

如果您正在使用MyISAM有关该主题的深入讨论,请点击此处.

  • 表转换有其自身的缺点.将`description`字段规范化为它自己的`MyISAM`表并加入它将允许同时使用`InnoDB`的强大功能和`MyISAM`的单一所需功能:) (2认同)

Bil*_*win 6

VARCHAR和之间的一个区别TEXT是,您可以DEFAULTVARCHAR列声明子句,但不能为TEXT列声明.

@Andy是正确的,InnoDB的同时存储VARCHAR,并TEXT在内部以同样的方式.

FULLTEXT索引都支持VARCHARTEXT.在5.6之前,您必须使用MyISAM来获取该类型的索引.在MySQL 5.6中,它最终支持FULLTEXTInnoDB.虽然你应该仔细测试它,因为它似乎返回与 MyISAM中的实现不同的结果.

但是,与MySQL中的任一实现相比,Sphinx Search的功能更快,功能更丰富.请参阅全文搜索投掷中的概述.

@Mohammed问道:

什么时候VARCHAR被考虑LONG VARCHAR?有人物门槛吗?

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

您可以将列声明为LONG VARCHAR,但这实际上只是MEDIUMTEXT的别名.

mysql> create table test ( l long varchar);

mysql> show create table test\G

CREATE TABLE `test` (
  `l` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)


ids*_*tam 5

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

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

根据这个测试,varchar 大约比 text 快三倍。