【问题标题】:MySQL VARCHAR or TEXTMySQL VARCHAR 或 TEXT
【发布时间】:2018-10-30 16:55:07
【问题描述】:

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

【问题讨论】:

    标签: mysql utf8mb4


    【解决方案1】:

    请参阅 MySQL 文档上的 this article

    就表结构而言,这些是主要潜力 不兼容:

    • 对于可变长度字符数据类型(VARCHAR 和 TEXT 类型),对于 utf8mb4,最大允许的字符长度更小 列而不是 utf8mb3 列。

    • 对于所有字符数据类型(CHAR、VARCHAR 和 TEXT 类型), utf8mb4 可以索引的最大字符数更少 列而不是 utf8mb3 列。

    所以VARCHAR 字段将不支持您的列数据,因为它只为 3 字节字符保留空间(utf8mb4,顾名思义,使用 4 字节)。

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

    引用的文章有更多的细节,我建议你阅读它。

    编辑:

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

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

    【讨论】:

    • Varchar 的最大字节大小限制为 65535 字节。即使是 4 字节字符,它仍然可以容纳 65535/4 = 16383 个字符。对于只需要 200-250 个字符的 OP 来说,这绰绰有余。而且,Text 数据类型不能被索引;而Varchar 可以被索引
    • @MadhurBhaiya 我正在撰写编辑,而您发表了评论。 :-D 谢谢
    • 啊。好的,谢谢。好的,谢谢你的回答。然后我将按计划使用文本。我很高兴从 uft8 到 uft8mb4 的排序规则更改没有任何问题。现在我只需要调整所有 VARCHAR (191+) 列。 @Madhur Bhaiya:在我的情况下没问题,因为我不想索引这些列。
    • 是的,VARCHAR。只是让我感到惊讶,因为随着转换的出现,整个 VARCHAR (255) 字段都会出现错误消息。刚刚测试了一下。可以在 VARCHAR 列中存储 350 个字符(字母、字符和数字)而不会出现任何问题。
    • @NormanHuth - MariaDB 10.1 和 MySQL 5.6 存在 VARCHAR(191)(又名 767 字节)索引问题。查看我的链接。
    【解决方案2】:

    如果您想在一列中存储 250 个字符,请使用 VARCHAR(250) 或更多。您也可以使用TEXT 类型。真的没多大关系。两者都是可变长度。我建议使用比您需要的更大的最大尺寸。通过指定超出您的需要,您不会失去任何东西。

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

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 2011-01-02
      • 2011-01-06
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多