博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让你的字段支持保存手机中的emoji表情
阅读量:6268 次
发布时间:2019-06-22

本文共 1257 字,大约阅读时间需要 4 分钟。

昨天在移动端接口开发中,开发人员反馈,往接口传值中包含手机输入法中的emoji表情时,app就直接挂掉。查找原因,发现在往数据库插入数据时,报错 Incorrect string value: '\xF0\x9F\x92\xAA",...' for column 'content' at row 1。

既然知道了问题,马上去引擎中搜索解决方案。以下给你普及一些知识:
一.

插入的字段里面包含emoji表情符。基本可以判定是字符编码的问题。我们的数据库里面使用的是utf8编码,普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点。
utf8与utf8mb4说明:  
UTF- 8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。  
UTF8MB4:MySQL在5.5.3之后增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。

二.ALTER TABLE cnfol_dynamic MODIFY COLUMN content text CHARACTER SET utf8mb4;(修改表字段的字符集)

改完后测试,插入失败。  
ALTER TABLE cnfol_dynamic CONVERT TO CHARACTER SET utf8mb4
;  (修改表的字符集)
[size=+0]
改完后测试,插入失败。  
ALTER DATABASE caishi  CHARACTER SET utf8mb4; (修改库的字符集)
改完后测试,插入失败。  
最后尝试修改mysql配置文件my.cnf
vi /etc/my.cnf
在[client]下添加
default-character-set=utf8mb4
在[mysqld]下添加
default-character-set=utf8mb4
修改完测试,依旧报错。
最终查找原因,在php代码连接数据库的时候,有个设置字符集的选项。这个选项也应该设置成utf8mb4。
以上全部修改成功后,测试可行。而且不影响原来的数据。utf8mb4是完全兼容utf8的。

转载于:https://www.cnblogs.com/wangfenphph2/p/7051098.html

你可能感兴趣的文章
Web安全学习计划
查看>>
输出有序数组的连续序列范围
查看>>
zinnia项目功能分析
查看>>
windows cmd for paramiko
查看>>
SQL经典面试题集锦
查看>>
View学习(一)-DecorView,measureSpec与LayoutParams
查看>>
色彩力量!21款你应该知道的优秀品牌设计
查看>>
SDUT 3503 有两个正整数,求N!的K进制的位数
查看>>
【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径...
查看>>
Redis常用命令速查 <第二篇>
查看>>
CSS规范
查看>>
使用FastDateFormat来代替JDK自带的DateFormat
查看>>
Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
查看>>
Android源代码解析之(三)--&gt;异步任务AsyncTask
查看>>
(zhuan) 自然语言处理中的Attention Model:是什么及为什么
查看>>
C#中使用RabbitMQ收发队列消息
查看>>
Hadoop1.2.1 全然分布式集群搭建实操笔记
查看>>
第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
查看>>
MVC总结--MVC简单介绍以及和WebForm差别
查看>>
tiny4412 裸机程序 五、控制icache【转】
查看>>