文章转自https://www.jianshu.com/p/20740071d854

在Android手机或者iPhone的各种输入法键盘中,会自带一些Emoji表情符号,如IPhone手机系统键盘包含的表情符号有:

IPhone Emoji.png

如果在移动端发布文本内容时包含了这种Emoji表情符号,通过接口传递到服务器端,服务器端再存入MySQL数据库:

  • 对gbk 字符集的数据库,写入数据库的数据,在回显时,变成 ‘口口’ 无法回显;

  • 对utf8 字符集的数据库,则根本无法写入数据库,程序直接报出异常信息
    java.io.exception xxxxxxxx.

原因分析:

Emoji表情符号为4个字节的字符,而 utf8 字符集只支持1-3个字节的字符,导致无法写入数据库。

解决方案:

  1. 遍历输入的文本,把四字节长度的字符,修正为自定义的字符替换掉。

  2. 修改MySQL数据库字符集, 把数据库字符集从utf8 修改为支持1-4 个字节字符的utf8mb4。

事实上可以看出,第一种方案的工作量较大,并不可取。推荐使用第二种方案,修改数据库字符集。从MySQL 5.5.3版本开始,数据库可支持4个字节的utf8mb4 字符集,一个字符最多可以有4个字节,所以能支持更多的字符集,故能存储Emoji表情符号。从 mysql 5.5.3 之后版本基本可以无缝升级到 utf8mb4 字符集。同时,utf8mb4兼容utf8字符集,utf8 字符的编码、位置、存储在utf8mb4与utf8字符集里一样的,不会对有现有数据带来损坏。

升级方案:

  1. 修改数据库字符集character-set-server=utf8mb4 重启数据库生效。

  2. 修改database 的字符集为 utf8mb4 alter database dbname character set utf8mb4

  3. 修改表的字符集 为utf8mb4 , alter table character set = utf8mb4

附上:

Emoji 全编码字符集:IOS Emoji


作者:亦枫
链接:http://www.jianshu.com/p/20740071d854
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Emoji表情符号在MySQL数据库中的存储的更多相关文章

  1. Emoji表情符号录入MySQL数据库失败解决

    让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节, ...

  2. Emoji表情符号录入MySQL数据库报错的解决方案(MySQL utf8与utf8mb4区别)

    本文转自:http://blog.itpub.net/26230597/viewspace-1243233/前言:手机app应用评论的时候,恢复表情符号,提示失败. 1,查看tomcat后台日志,核心 ...

  3. Emoji表情符号录入MySQL数据库报错

    版本一: 1,查看tomcat后台日志,核心报错信息如下:   Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\ ...

  4. Emoji表情符号录入MySQL数据库报错的解决方式

    前言:手机app应用评论的时候,恢复表情符号.提示失败.​1,查看tomcat后台日志,核心报错信息例如以下:  Caused by: java.sql.SQLException: Incorrect ...

  5. Emoji表情符号录入MySQL数据库报错的解决方案

    原文:http://blog.itpub.net/26230597/viewspace-1243233/ 1,查看tomcat后台日志,核心报错信息如下:  Caused by: java.sql.S ...

  6. 移动端的emoji表情符号插入MySQL数据库失败

    插入数据时候报了错:### Error updating database. Cause: Java.sql.SQLException: Incorrect string value: ‘\xF0\x ...

  7. MySQL数据库中的存储引擎

    1.认识存储引擎 存储引擎指定了表的类型,即如何存储和索引数据.是否支持事务等,同时存储引擎也决定了表在计算中的存储方式. 存储引擎是以插件的形式被MySQL软件引入的,所以可以根据应用.实际的领域来 ...

  8. 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上

    昨天主要是进行对数据库的内容提取出来并进行动态显示,这个只需要设置一个servlet从数据库中获取数据即可,只是图片比较特殊,不能显示. 今天准备继续找方法来实现图片得录入和显示到jsp中,准备从网上 ...

  9. mysql数据库中的存储引擎是什么意思呢

    需求描述: 在看mysql的内容,经常提到存储引擎,那么到底什么是存储引擎呢 在这里对于概念进行理解,记录下. 概念解释: 存储引擎(storage engine):存储引擎就是mysql中的一个组件 ...

随机推荐

  1. 清除电脑垃圾.bat

    echo.title delete cachecolor 0aecho.echo please enter any key start.....@echo offecho execuing delet ...

  2. Hadoop专有名词

    Hadoop专有名词 一. HDFS 二. MapReduce 1.MRAppMaster:MapReduce Application Master 负责整个过程调度和协调的 2.MapTask:在M ...

  3. 【Spring】4、Spring中 @Autowired标签与 @Resource标签 的区别

    转自:http://blog.csdn.net/angus_17/article/details/7543478 spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义 ...

  4. Vue 系列之 组件

    一个简单的 TodoList <body> <div id="root"> <div> <input type="text&qu ...

  5. js事件冒泡和事件捕获详解

    Javascript与HTML之间的交互是通过事件实现. 一.事件流 事件,是文档或浏览器窗口中发生的一些特定的交互瞬间.事件流,描述的是页面中接受事件的顺序.IE9,chrome,Firefox,O ...

  6. HDU5887(SummerTrainingDay01-D)

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. Android View体系(二)实现View滑动的六种方法

    1.View的滑动简介 View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理.其实不管是那种滑动的方式基本思想都是类似的:当触摸事件传到View时,系统 ...

  8. C语言编程比赛WBS

  9. MySQL修改编码为UTF-8无效果解决办法

    本来这是一件很简单的事,有很多博客里都有教程,但却足足花了我半天的时间才解决问题. 可能是因为我的MySQL安装时没有选择默认路径的原因,按照网上的教程修改了下图中的my.ini配置文件后编码并没有发 ...

  10. [20180627]测试bbed是否支持管道命令.txt

    [20180627]测试bbed是否支持管道命令.txt --//测试bbed是否支持管道命令.txt 1.环境:SCOTT@test01p> @ ver1PORT_STRING         ...