1

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

  • users.bio(小文本,utf8_general_ci)
  • questions.question(长文本,utf8_general_ci)
  • questions.answer(长文本,ut8_general_ci)
  • comments.comment(小文本,utf8_general_ci)

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

  1. 创建数据库的备份

  2. 运行这些命令:

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,即保留以前的文本,用户将能够正确阅读其内容
  • 其他列不会改变
  • 涉及受影响表的查询会变慢

我的预期准确吗?我需要更改连接吗?谢谢

4

1 回答 1

1

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

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

您确实需要确定您的客户正在使用 utf8mb4,而不仅仅是 utf8。这在连接或与一些参数中出现SET NAMES utf8mb4

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

附加物

期望 1-3:是的。

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

于 2015-09-08T06:52:10.023 回答