关于mysql 存储 emoji报错

关于mysql 存储 emoji报错( Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F)value:'\xF0\x9F\x98\x84\xF0\x9F)

       最近在完成项目的功能模块时,由于支持用户发表帖子,帖子内容中带有表情,插入的时候报"Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F"的错误,博主也是百度了一番,网上大多教程都是说要将数据库跟表的编码换成utf8mb4_general_ci,但由于项目已经上线了,不能轻易修改库跟表的东西,所以重新换了一种方式,这样也能完美的解决这个问题。

       先说说导致发错的原因吧:

       mysql utf-8 编码储存的是 2-3个的字节,而emoji则是4个字节。

       解决方法:

       我们将需要存储表情的数据表的字段修改为utf8mb4_general_ci,整表跟整库的结构不动,只动对应的字段就行。

       由于博主使用的是原生的写法,所以在插入跟获取的数据的时候需要声明编码,代码如下:

mysqli_query($selfCon, "set names utf8");
mysqli_query($selfCon, "set names utf8mb4");

       这样便可以最小程度的减少对库跟表的影响,同时又兼容应为emoji而出错。

0条评论

发表评论