Mysql 是否可以为特定表的特定列启用emojis?

Mysql 是否可以为特定表的特定列启用emojis?,mysql,utf-8,emoji,utf8mb4,Mysql,Utf 8,Emoji,Utf8mb4,首先,我想向你们保证,我已经完成了我的“家庭作业”,并且已经阅读了,并且。另外,我前面的问题中有一个与这个问题密切相关,但在这个问题中,我讨论的是flourishlib与utf8mb4的兼容性问题。这个问题涉及更深层次的问题。假设我有几个表,我只想修改几个列以使用utf8mb4编码,以便在更改后保留一些存储空间和性能。如果我将整个数据库更改为utf8mb4编码,那么它的大小将增加33%,这也将严重影响其性能。因此,我们从三个不同的表中选择了四列来支持emojis。这些是: users.bio(

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

  • users.bio
    (tinytext,utf8\u general\u ci)
  • 问题。问题
    (长文本,通用)
  • 问题。回答
    (长文本,通用)
  • comments.comment
    (tinytext,utf8\u general\u ci)
因此,我的行动计划如下:

  • 创建数据库的备份

  • 运行以下命令:

  • alter table comments change comment tinytext字符集utf8mb4 collate utf8mb4\u unicode\u ci;
    alter table用户更改bio bio tinytext字符集utf8mb4 collate utf8mb4\u unicode\u ci;
    更改表格问题更改问题长文本字符集utf8mb4校对utf8mb4\U unicode\U ci;
    更改表格问题更改答案答案长文本字符集utf8mb4校对utf8mb4\u unicode\u ci;
    
    期望:

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

    我的期望准确吗?我需要更换连接吗?谢谢

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

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

    您确实需要确定您的客户所说的是utf8mb4,而不仅仅是utf8。这在连接中的某个参数中出现,或与
    设置名称utf8mb4
    一起出现

    如果您需要自动执行
    更改
    ,那么通过“选择到信息”模式生成它们非常容易

    附录

    期望1-3:是的


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

    。。。很明显,SO的降价不支持在列表后面紧跟一个代码块。瑞克,我不喜欢汉字。正如我在问题中所描述的,我们正在讨论表情符号。另外,您关于varchar的大小没有增加的评论是无效的。想象一下,utf8中存储了一个10个字符长的varchar。这需要30个字节。现在,想象一个存储在utf8mb4中的10个字符长的varchar。这需要40个字节。增加33%。此外,如果您再次阅读该问题,您将看到涉及的类型有tinytext和longtext。我需要4个修改,不需要自动化。你的回答并没有真正解决这个问题。我真的很想接受它,但您需要进行编辑以确保它解决了问题。与此同时,我已经解决了这个问题,所以我要么接受并回答,要么写我自己的。看来你关于瓦查尔斯的论点是正确的,但是,如果不涉及varchar,则不会影响此问题。对于
    utf8
    ,不带emojis的文本将在
    varchar
    Text
    中占据与
    ut8mb4
    完全相同的空间。(我回答了“期望”)好的,阿登达给了你答案,谢谢。我不会在这里单独写一个答案。