通过一大堆copypaste的百度内容, 大家应该已经知道了若要支持emoji表情必须使用5.5以上的MySql, 并且所有的编码类型应该修改为utf8mb4.

但是要成功插入emoji还需要客户端在使用数据时指定utf8mb4: SET NAMES utf8mb4

例如如果使用yii框架开发php, 在main.php的db数组里面要指定charset='utfmb4', 否则插入的还是????

所以针对ejabberd, 也需要修改相关的odbc模块, 具体的地方就在源码的src/odbc/ejabberd_odbc.erl, 找到其中的 set names 'utf8' 修改为 set names 'utf8mb4'


然后重新编译ejabberd

./configure --prefix==/usr/local/ejabberd --enable-odbc
make&&make install 


重启ejabberd, 完毕


ps. 有人说我都不保存聊天消息, 是不是不需要处理这个. 好吧, 你可以测试一下, 发送一个带emoji的聊天消息, 假如另一个客户端没有登录, ejabberd就会保存这个消息到spool表中, 由于未修改前输入的emoji会被截断, 当另一个的客户端登录时, 果然没有收到刚才的emoji消息.