是否可以为特定表格的特定列启用表情符号?
Is it possible to enable emojis for specific columns of specific tables?
首先,我想向您保证,我已经完成了我的 "homework" 并且已经阅读了 this, this, this and this. Also, 我以前的问题与这个问题密切相关,但在那个问题中我正在处理flourishlib 与 utf8mb4 的兼容性问题。这个问题涉及更深层次的问题。假设我有几个表,我只想修改几列以使用 utf8mb4 编码,以在更改后保留一些存储 space 和性能。如果我将整个数据库的编码更改为 utf8mb4,那么它的大小将增加 33%,这也会严重影响它的性能。因此,我们从三个不同的表中选择了四列来支持表情符号。它们是:
users.bio
(tinytext, utf8_general_ci)
questions.question
(长文本,utf8_general_ci)
questions.answer
(长文本,ut8_general_ci)
comments.comment
(小文本,utf8_general_ci)
因此,我的行动计划如下:
创建数据库备份
运行 这些命令:
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,即保留之前的文本,用户将能够正确阅读其内容
- 其他列不会改变
- 涉及受影响表的查询会变慢
我的期望准确吗?我需要更改连接吗?谢谢
您需要在任何存储中文的列中使用 utf8mb4。
在VARCHAR(...)
utf8mb4中,每个"character"占用1-4个字节。没有 33% 的增长。
另一方面,CHAR(10) utf8mb4
总是分配 40 个字节。
您确实需要确定您的客户端使用的是 utf8mb4,而不仅仅是 utf8。这来自连接中的某些参数或 SET NAMES utf8mb4
.
如果您需要自动化 ALTERs
,通过 SELECT 将它们生成到 information_schema.
中非常容易
附录
期望 1-3:是。
预期 4(涉及受影响表的查询会变慢)——处理速度基本相同。
首先,我想向您保证,我已经完成了我的 "homework" 并且已经阅读了 this, this, this and this. Also,
users.bio
(tinytext, utf8_general_ci)questions.question
(长文本,utf8_general_ci)questions.answer
(长文本,ut8_general_ci)comments.comment
(小文本,utf8_general_ci)
因此,我的行动计划如下:
创建数据库备份
运行 这些命令:
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,即保留之前的文本,用户将能够正确阅读其内容
- 其他列不会改变
- 涉及受影响表的查询会变慢
我的期望准确吗?我需要更改连接吗?谢谢
您需要在任何存储中文的列中使用 utf8mb4。
在VARCHAR(...)
utf8mb4中,每个"character"占用1-4个字节。没有 33% 的增长。
另一方面,CHAR(10) utf8mb4
总是分配 40 个字节。
您确实需要确定您的客户端使用的是 utf8mb4,而不仅仅是 utf8。这来自连接中的某些参数或 SET NAMES utf8mb4
.
如果您需要自动化 ALTERs
,通过 SELECT 将它们生成到 information_schema.
附录
期望 1-3:是。
预期 4(涉及受影响表的查询会变慢)——处理速度基本相同。