PHP
关于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条评论