最近发现用户名和用户输入内容有????, 查了一下发现需要让mysql使用utf-8mb4来编码, 后端说数据库改了utf-8mb4, 但是还是不能发送.
请问需要对reqeust进行配置或者需要提前对表情进行编码么?
ps: 我尝试对表情进行编码为base64, 后端可以正常存储, 但每次发送和接收都需要编码解码, 效率低.
下面是后端返回的报错
1267:Illegal mix of collations
(utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)
for operation '=' [ SQL语句 ]
: SELECT * FROM `pigcms_house_village_forum` WHERE `title` = '士大夫' AND `content` = '😒 ' LIMIT 1
在mysql 5.7.19,创建的数据库默认选择的编码是
utf8 -- UTF-8 Unicode
,因此字段默认的编码为utf-8
,但在项目开发中存在一个需求:在某个字段中存储混有emoji表情的字符串,此时以普通编码格式如utf8
来存储emoji表情时,会报错。把字段的编码格式改为:
utf8mb4
即可。详细可见:https://www.cnblogs.com/itmacy/p/12201193.html
我怀疑你只是把数据库的默认编码设置为了utf8mb4,却没有对表来修改编码。检测一下需要存emoji内容的字段,是不是utf8mb4。如果没改过,大概率还是utf8.
不需要做任何特殊的编码和配置,只需要修改mysql的读写编码,建议贵公司把现在这个不懂装懂的后端开了,重新招一个新的,拿这个做面试题