数据库处理emoji

来源:互联网 发布:asp.net购物车源码 编辑:程序博客网 时间:2024/06/05 21:17

遇到问题,别人评论一个内容,加了表情,api返回数据Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column或者使用微信登陆的时候也会遇到这个问题,微信名称带表情。不能存到数据库。原因是Mysql的utf8字符集是3字节的,而emoji是4字节,所有不能够存入。提供三种方法解决:

1、使用正则去掉表情

$nickName = preg_replace_callback('/[\xf0-\xf7].{3}/',function($r) { return '';}, $nickName);

2、将表情base64转化之后存入数据库,取出来的时候base64一下就行

入库:$nickName = preg_replace_callback('/[\xf0-\xf7].{3}/', function($r) { return '@E' . base64_encode($r[0]);}, $nickName);

出库:$nickName = preg_replace_callback('/@E(.{6}==)/', function($r) {return base64_decode($r[1]);}, $nickName);

3、改数据库类型(由于是线上的数据库,我怕弄坏,所有我使用的是第二种方法)

前提条件mysql版本>=5.5.3

将字段,表,数据库连接全都由utf8直接升级为utf8mb4字符集

1 0