MySQL VARCHAR 或文本

MySQL VARCHAR or TEXT

我已经在这里和那里阅读了自己,但还没有找到能回答我问题的答案... 我现在有一个 utf8mb4 数据库,想在一列中存储一个字符串(长度为 200-250 个字符)。 VARCHAR (200 - 250) 现在可以用于 utf8mb4 还是我必须使用 TEXT?

请参阅 MySQL 文档中的 this article

In terms of table structure, these are the primary potential incompatibilities:

  • For the variable-length character data types (VARCHAR and the TEXT types), the maximum permitted length in characters is less for utf8mb4 columns than for utf8mb3 columns.

  • For all character data types (CHAR, VARCHAR, and the TEXT types), the maximum number of characters that can be indexed is less for utf8mb4 columns than for utf8mb3 columns.

因此 VARCHAR 字段将不支持您的列数据,因为它保留 space 仅用于 3 字节字符(utf8mb4,顾名思义, 使用 4 个字节).

在这种情况下,您需要使用其他列类型,例如 TEXT

引用的文章比较详细,推荐阅读

编辑:

阅读更多,我意识到 VARCHAR 数据类型实际上最多支持 65535 个字符(自 MySQL 5.0.3 起)和 65535 个字节。所以 chars 的实际最大长度是 65535 / 4 = 16383 chars.

所以,你的VARCHAR列将支持你的250个字符长的字符串。

如果要在一列中存储 250 个字符,请使用 VARCHAR(250) 或更多。您也可以使用 TEXT 类型。这真的无关紧要。两者都是可变长度的。我建议使用比您需要的大得多的最大尺寸。指定超出需要的内容不会丢失任何内容。

列的大小与编码无关,因为MySQL计算的是字符数,而不是字节数。如果要存储所有 Unicode 字符,则必须使用 utf8mb4 字符集。