在mysql中存emoji
问题描述:
form表单提交的内容中包含emoji, 经由PHP处理落库到MySQL后, 数据库字段出现乱码.
解决方案:
1) 修改对应字段的编码为 utf8mb4
.(不需要修改整个数据库的编码)
2) 修改PHP连接MySQL的编码为utf8mb4
. (数据库连接的config参数)
3) 如果涉及到IOS/Android/Web多客户端,对emoji再过滤一遍,编码为统一的格式.使用 php-emoji
解释
Unicode的编号从0000开始一直到10FFFF共分为16个Plane,每个Plane中有65536个字符。而UTF-8则只实现了第一个Plane,可见UTF-8虽然是一个当今接受度最广的字符集编码,但是它并没有涵盖整个Unicode的字库
所谓Emoji就是一种在Unicode位于\u1F601-\u1F64F区段的字符。这个显然超过了目前常用的UTF-8字符集的编码范围\u0000-\uFFFF
MySQL默认的utf-8占用三个字节, 但存储emoji需要四个字节, mysql在5.6才支持的utf8mb4
才可以存下.