Varchar 或文本数据类型,字符串长度可达几千个字符

Varchar or Text Data Types for strings length up to few thousands of chars

我有一个小型社交网站,上面有帖子和评论。
我决定让用户使用他们想要的任意数量的字符创建帖子,我认为存储此类内容的最佳数据类型是 Text.
但是对于评论,在大多数情况下用户只写一行或几行文字。这就是为什么我认为我必须将评论字符串长度限制为最多 3000 甚至 6000 个字符。
那么,我的评论应该使用什么数据类型?
VarcharText?

根据您的要求使用四种可用的文本类型 [TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT] 中的一种。 http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html

VARCHAR 列中的值是可变长度字符串。长度可以指定为 0 到 65,535 之间的值,这似乎足以处理用户预期的评论长度。

四种 TEXT 类型是 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。每种数据类型可存储的最大数据量约为:

TINYTEXT 256 字节

TEXT 65,535 字节 ~64kb

MEDIUMTEXT 16,777,215 字节 ~16MB

LONGTEXT 4,294,967,295 字节 ~4GB

另见 When to use TEXT in mysql instead of VARCHAR

VARCHARTEXT 有很多不同之处。我说的一些话:

  • 如果最大长度超过 512 个字符,请使用 TEXT
  • 永远不要使用 TINYTEXT -- 它只有相对于 VARCHAR(255) 的负值。
  • 不要使用VARCHAR(255);选择一个合理的最大值而不是 255。(这是与复杂查询中的温度 table 相关的小优化。)
  • 仅对真正固定长度的事物使用CHAR。在几乎所有这种情况下,都使用 CHARACTER SET ascii(或 latin1)。 (否则花费的 space 比您预期的要多。
  • 使用CHARACTER SET ut8mb4。 (例外情况越来越少。)

(对不起,我跑题了。回到主题...)

I 索引,在 InnoDB 行的布局中(有 4 个不同的 ROW_FORMATs)等,VARCHAR(513)TEXT.

本质上没有区别

VARCHAR 的几个参数之一是它将存储限制为给定的长度。但这有多重要?