MySQL存储emoji表情
Background
在使用字符集是UTF-8的MySQL数据库存储emoji表情时,会抛出异常(如微信开发获取用户昵称,有的用户的昵称是emoji的图像)
Exception
1 | java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 |
Why
emoji表情是1个字符占4个字节,而UTF-8编码只支持1-3个字节的字符,所以UTF-8编码下,如果直接存储表情,数据库存储会失败
How
修改table的字符集
1 | ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
utf8mb4完全向后兼容utf8,无乱码或其他数据丢失的形式出现。理论上是可以放心修改,如果您不放心修改,您可以拿备份恢复数据