是否可以为特定表的特定列启用表情符号?

时间:2015-09-07 22:22:46

标签: mysql utf-8 emoji utf8mb4

首先,我想向您保证,我已完成了我的"家庭作业"并阅读了thisthisthisthis。此外,one我以前的问题与此问题密切相关,但在这个问题上,我正在讨论与utf8mb4的兼容性问题。这个问题涉及更深层次。让我们假设我有几个表,我想修改几列以获得utf8mb4编码,以便在更改后保留一些存储空间和性能。如果我将整个数据库更改为utf8mb4的编码,那么它的大小将增加33%,这也将严重影响其性能。因此,我们从三个不同的表中选择了四列来支持表情符号。这些是:

  • users.bio(tinytext,utf8_general_ci)
  • questions.question(longtext,utf8_general_ci)
  • questions.answer(longtext,ut8_general_ci)
  • comments.comment(tinytext,utf8_general_ci)

因此,我的行动计划如下:

  1. 创建数据库备份

  2. 运行以下命令:

  3. alter table comments change comment comment tinytext character set utf8mb4 collate utf8mb4_unicode_ci;
    alter table users change bio bio tinytext character set utf8mb4 collate utf8mb4_unicode_ci;
    alter table questions change question question longtext character set utf8mb4 collate utf8mb4_unicode_ci;
    alter table questions change answer answer longtext character set utf8mb4 collate utf8mb4_unicode_ci;
    

    期望:

    • 这应该使指定的列使用utf8mb4而不是utf8
    • 现有数据将被正确转换为utf8mb4,即之前的文本将被保留,用户将能够正确阅读其内容
    • 其他栏目不会更改
    • 涉及受影响的表的查询将会更慢

    我的期望是否准确?我需要更改连接吗?感谢

1 个答案:

答案 0 :(得分:1)

在任何存储中文的列中都需要utf8mb4。

VARCHAR(...) utf8mb4中,每个"字符"占用1-4个字节。没有增加33%。 另一方面,CHAR(10) utf8mb4总是分配40个字节。

你需要确定你的客户正在谈论utf8mb4,而不仅仅是utf8。它来自连接中的某个参数或SET NAMES utf8mb4

如果你需要自动化ALTERs,很容易通过SELECT生成它们到information_schema。

<强>附加物

期望1-3:是的。

期望4(涉及受影响的表的查询将更慢) - 处理速度基本相同。