自从 Emoji 被推广开来,被越来越多的操作系统支持,变成了一种通用的表情符号,今天看到 Ghost 的官方博客文章中用了 Emoji,我也想试一下,发现自己文章中插入 Emoji 发表后不能显示。😭
Google 了一下,找到了问题,我的 Ghost 数据保存在 MySQL 数据库上,当时安装 MySQL 设置了 utf8 的字符集,需要改成 utf8mb4 才能支持存储 Emoji。
那么如何把当前 MySQL 的编码由 utf8 转换为 utf8mb4 呢?😶
首先,为了保险起见,务必先备份一下原来的数据库。
然后呢,确认一下 MySQL 的版本号,要高于 5.5.3。
第三步,修改 MySQL 的配置文件 my.cnf,加入下面的内容,如果之前有设置 utf8 字符集的内容,需要删除。
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
第四步,重启 MySQL 服务,并确认变更
#登录 MySQL(需要 MySQL root 密码)
mysql -uroot -p
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
第五步,修改数据库和数据表的编码格式。
#选择数据库,database-name 替换为你自己的数据库名
mysql> use database-name
#对于 Ghost 貌似修改这两处就行了
mysql> ALTER DATABASE ghost CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
mysql> ALTER TABLE posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
好了,现在再试试在 Ghost 博客文章中插入 Emoji 吧,是不是可以正常显示啦!😝