介绍

emoji 是iso和Mac OS系统特有的一系列“表情符号”,在手机设备使用频繁的今天,很多人的微博、留言、消息中都会嵌入类似的表情符号。不同于传统上UTF8字符的3个字节(中文地区的传统),emoji采用了4个字节的编码方式。这一个不算大的改变会导致系统出现类似的报错。

Incorrect string value: ‘xF0x9Fx8Cx9FVi…’ for column ‘nick_name’ at row 1

既然是字符不能识别的报错,只要简单的修改字符集就可以,使用了uft8mb4字符集。utf8mb4字符集可以平滑替换原有的utf8,不过需要注意的是只有 MySQL >=5.5.3 版本以上才会支持utf8mb4,而且是server 和client都要在此版本之上方可。对于较旧版本的用户需支持emoji,建议升级版本。

准备工作

在修改数据库编码前先对数据库备份,虽然utf8mb4兼容utf8,但有备无患。

修改数据库my.cnf配置

1
2
3
4
5
6
7
8
9
[mysqld]
init_connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
character-set-client-handshake = false
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

修改表或字段编码

修改对应字段的编码格式
ALTER TABLE MODIFY 字段 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

建议只是个别字段开通,全表开通的方式:
ALTER TABLE CHARSET=utf8mb4;

重启mysql

重启MySQL使配置生效。
用命令查看配置是否生效:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
shell > show variables like '%char%';
+--------------------------+----------------------------------+
| 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 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

本文地址: http://blog.up72.cn/2016/08/03/storing emoji in mysql/