博客支持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
|
|
设置表的字段字符集
有多少表、表有多少字段需要改,就要执行多少条语句。类似这样:
1
|
|
设置服务端、客户端字符集
修改 my.cnf
中对应字段值:
1 2 3 4 5 6 7 8 9 10 |
|
在 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 |
|
关于UTF-8
UTF-8 本身是不定长编码的,支持 1~4 个字节的字符编码。 但是呢,MySQL 的 utf8 只支持 1~3 个字节,utf8mb4 才支持 4 个字节。
于是网上就有人把 utf8mb4 当成了一种新的 UTF-8 编码,可怕!还有人说 utf8mb4 是 utf8 的超集。。。
😂😂😂😂😂