Mysql保存emoji表情

  • Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了。对于我们开发者来说,如何将 Emoji 存入 MySql 数据库或者取出来,就变成了一种必须掌握的技能了。

  • Emoji 是一种图形符号,能够很直观地反应出某种文字含义。它让我想起远古时代的象形文字

  • 糟糕
    如果我们直接将 Emoji 表情存入数据库的话,通常会出现下面这个错误。

mysql库不能修改为utf8mb4编码,但又想存emoji表情怎么办?
因为数据库的字符编码一般是 utf8(支持的编码范围为 \u0000-\uFFFF),而 Emoji 所在的编码范围是 \u1F601-\u1F64F,超出 MySql 的边界了。

怎么解决这个问题呢?

一、utf8mb4

可以将 MySql 的字符集由 utf8 调整为 utf8mb4。utf8mb4 是 MySql 在 5.5.3 版本之后增加的一个编码方式,用来兼容四字节的 Unicode(包括 Emoji)。

理论上,utf8mb4 是 utf8 的超集,其中 mb4 是 most bytes 4 的意思,将字符集修改为“utf8mb4”,并不会对已有的 utf8 编码读取产生任何问题。

但通常这种方式并不是最优解,因为应用层还需要将 MySql 的连接方式作出以下调整:

jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8mb4&useSSL=false&zeroDateTimeBehavior=convertToNul
由原来的 characterEncoding=utf8 调整为 characterEncoding=utf8mb4。

二、EmojiConverter

更友好的解决方式应该将 Emoji 当做字符串存储,然后在取出来的时候再转成 Emoji,这样可以兼容所有的数据库版本。

我在 GitHub 上找到了这样的一个库——EmojiConverter,它可以很方便地将 Emoji 转换为字符串的别名,同时也支持将这个别名转换为 Emoji。

1)在 pom.xml 文件中加入 EmojiConverter

<dependency><groupId>com.github.binarywang</groupId><artifactId>java-emoji-converter</artifactId><version>0.1.1</version>
</dependency>

2)存储 Emoji 之前调用 toHtml() 方法转换一下

EmojiConverter emojiConverter = EmojiConverter.getInstance();
String html = emojiConverter.toHtml(keywords.getContent().trim());
// JFinal 的保存方式
Record record = new Record().set("content", html)
Db.save("keywords", record);

比如说,要存储的内容当中包含了一个点赞的 Emoji。

mysql库不能修改为utf8mb4编码,但又想存emoji表情怎么办?
那么通过 emojiConverter.toHtml() 转了之后的内容是什么样子呢?是一个码点:,debug 的时候截图如下所示。

mysql库不能修改为utf8mb4编码,但又想存emoji表情怎么办?
这样的话,MySql 保存的内容就是一个普通的字符串了,编码方式仍然可以是 utf8。

3)显示 Emoji 的时候调用 toUnicode() 方法格式化一下

String unicode = emojiConverter.toUnicode(content);
outMsg.setContent(unicode);

原文:https://juejin.im/post/5db696b76fb9a0203b234c22?utm_source=gold_browser_extension

Mysql保存emoji表情相关推荐

  1. mybatis mysql 微信昵称表情_springboot+mybatis+druid+mysql 保存emoji表情

    最近在学习springboot,在练习做一个简单博客系统时遇到了保存emoji表情出错,搜索了半天才搞定.这里记录下来,希望能够帮助到自己或有需要的人不要踩坑. 第一步:首先你要保证你的mysql数据 ...

  2. mysql保存Emoji表情或微信文字、图文回复带Emoji等微信表情图标?

    背景: 客户需要在自动回复的文字.图文表情上使用Emoji表情? 原因: Mysql表设计时,都是用UTF8字符集的,Mysql的utf8字符集是3字节的,而emoji是4字节,所以保存修改等操作会出 ...

  3. mysql保存emoji表情(比如微信开发用户昵称)

    使用mysql数据库的时候,如果字符集是UTF-8并且在php服务器上,当存储emoji表情的时候,会抛出以上异常(比如微信开发获取用户昵称,有的用户的昵称用的是emoji的图像) 这是由于字符集不支 ...

  4. mysql存带表情的微信昵称_MySQL保存 emoji 表情(微信昵称表情)

    问题分析 在微信开发过程中,总是会遇到带有emoji表情昵称的微信用户无法自动登录的问题. 后台代码抛出类似下面的异常信息. java.sql.SQLException: Incorrect stri ...

  5. php mysql emoji表情_php 让MySQL支持Emoji表情 mysql 5.5.3+

    让MySQL支持Emoji表情 mysql 5.5.3+ 让mysql支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决 ...

  6. mysql 5.6 emoji_让MySQL支持Emoji表情 mysql 5.6

    让 1 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需要 >= MySQL 5.5.3版本.从库也必须是5.5的了.低版本不支持这个字符集.  复制报错 2 my.cnf 文件 ...

  7. 让MySQL支持Emoji表情 mysql 5.6

    让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决方案:将Mysql的编码从utf8转换成utf8mb4. ...

  8. php保存emoji表情,php保存emoji表情

    最近一个朋友在调用微信接口的时候,获取到的数据保存到数据库失败了,原因是因为里面含有emoji表情,接下来吾爱编程为大家介绍一下关于php保存emoji表情的方法,有需要的小伙伴可以参考一下: 1.保 ...

  9. emoji表情mysql报错_让MySQL支持Emoji表情 mysql 5.6

    让MySQL支持Emoji表情,涉及无线相关的 MySQL数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需 ...

最新文章

  1. python接口自动化 一个变量 其他接口要用_python接口自动化测试之接口数据依赖的实现方法...
  2. 我说分布式事务之TCC
  3. 如何用java+tomcat来创建网站服务器
  4. hs_err_pid
  5. 一文带你了解隐马尔科夫模型
  6. iOS App 启动性能优化
  7. python--------进程与线程
  8. 剑桥offer(41~50)
  9. 硬件基础知识---(16)三极管放大电路
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的房屋租赁管理系统
  11. DevExpress 汉化(简单、实用、快速) 转
  12. Python文档学习笔记(1)--使用Python 解释器
  13. CentOS搭建git服务器实测
  14. 超简单的Matlab附加功能安装包的安装方法
  15. 网络蜘蛛的工作原理及操作
  16. Android Jetpack 之 DataStore 初探
  17. 揭开A股38位「 90后」董事长的神秘面纱
  18. php yar 安装失败_CentOS搭建Yar框架以及遇到的坑!
  19. 国际结算银行:嵌入式监管可大幅简化合规监管
  20. 东北农业大学考研计算机大纲,东北农业大学339农业知识综合一考研大纲

热门文章

  1. Where Have You Gone扒谱
  2. 组合数据类型(集合)
  3. 计算机滴滴响重启,电脑发出滴滴声是什么原因(常见的4个故障和解决方法)...
  4. maven项目编译中文乱码和myeclipse中文乱码和电脑乱码?
  5. 【ThinkPad系统重装】
  6. matplotlib 均值_matplotlib可视化箱线图
  7. 联想第一季度业绩超预期,增长势头强劲
  8. ANSYS fluent
  9. AI作业2-监督学习
  10. 如何运用Microsoft Office Project 2003来做项目计划