博客日志】现已支持 emoji 表情图片啦!

陪她去流浪 桃子 2018年04月02日 编辑 阅读次数:1813

博客支持Emoji啦😋😋😋!

博客的数据库使用的是 MySQL。MySQL在5.5版本之前,对UTF-8的支持最多只支持到3个字节,从5.5开始支持4个字节的UTF-8。 3个字节的UTF-8基本只覆盖了 UNICODE 的 BMP(Basic Multilingual Plane) 字符,而 Emoji 表情符号,恰好就不在这个范围内。

往不支持4个字节UTF-8编码的MySQL字段里面插入数据时,将得到类似:

Incorrect string value: '\xF0\x9F\x98\x82' for column 'content' at row 1

的错误。

要使 MySQL 支持4个字节的UTF-8,关键做法是:把表的字段定义(修改)由utf8_general_ci修改为utf8mb4_unicode_ci

简要步骤

升级数据库前记得备份!!!

设置数据库字符集

1
ALTER DATABASE 数据库名字 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

设置表的字段字符集

有多少表、表有多少字段需要改,就要执行多少条语句。类似这样:

1
ALTER TABLE `posts` CHANGE `title` `title` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

设置服务端、客户端字符集

修改 my.cnf 中对应字段值:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

在 macOS 应该是没有这个配置文件的(听说已是最优),手动创建并放在以下位置之一即可:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

重启服务端

一定要重启服务端,不然可能无效。类似下面之一:

1
2
3
$ service restart mysql
$ service mysql restart
$ brew services restart mysql

关于UTF-8

UTF-8 本身是不定长编码的,支持 1~4 个字节的字符编码。 但是呢,MySQL 的 utf8 只支持 1~3 个字节,utf8mb4 才支持 4 个字节。

于是网上就有人把 utf8mb4 当成了一种新的 UTF-8 编码,可怕!还有人说 utf8mb4 是 utf8 的超集。。。

😂😂😂😂😂

标签:博客日志 · Emoji