01 前言

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

Emoji 其实是一个日语词(えもじ),E 表示"絵",moji 表示"文字";连在一起就是"絵文字",可以更形象化地表情达意。

02 问题

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

因为数据库的字符编码一般是 utf8(支持的编码范围为 \u0000-\uFFFF),而 Emoji 所在的编码范围是 \u1F601-\u1F64F,超出 MySql 的边界了。

怎么解决这个问题呢?

03、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=convertToNull

由原来的 characterEncoding=utf8 调整为 characterEncoding=utf8mb4。

04、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。

那么通过 emojiConverter.toHtml() 转了之后的内容是什么样子呢?是一个码点:&#128077,debug 的时候截图如下所示。

这样的话,MySql 保存的内容就是一个普通的字符串了,编码方式仍然可以是 utf8。

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

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

格式化后的内容可以正常显示在微信公众号回复的文本消息中,截图如下所示。

Mysql如何存取Emoji表情包相关推荐

  1. Mysql关于处理emoji表情包报错问题的处理

    mysql使用emoji表情的功能,在mysql 5.5 之前,UTF-8编码只支持1-3个字节:从MySQL 5.5开始,可以支持4个字节UTF编码 utf8mb4 ,一个字符能够支持更多的字符集, ...

  2. php mysql emoji_php实现emoji表情包的数据库存储和展示

    在写项目chinaobd2的时候遇到这样一个问题,用户在发表评论和回复的时候,往往会将表情输入,然后展示出来却是一堆乱码,贼恶心,最后我写了一个php方法,对其进行了转化,废话不多说,我们直接看代码吧 ...

  3. mysql不支持emoji表情的问题的解决方法

    mysql不支持emoji表情的问题的解决方法 参考文章: (1)mysql不支持emoji表情的问题的解决方法 (2)https://www.cnblogs.com/flywang/p/851420 ...

  4. markdown中快速插入Emoji表情包语法速查表!!!

    markdown中快速插入Emoji表情包语法速查表!!!

  5. 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案

    [Mysql]存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案 参考文章: (1)[Mysql]存储emo ...

  6. mysql设置可以存表情_Mysql实例使MySQL能够存储emoji表情字符的设置教程

    <MysqL实例使MysqL能够存储emoji表情字符的设置教程>要点: 本文介绍了MysqL实例使MysqL能够存储emoji表情字符的设置教程,希望对您有用.如果有疑问,可以联系我们. ...

  7. CSS雪碧图制作emoji表情包

    效果图: 原理:利用雪碧图,来实现emoji表情包,减少图片请求数. 表情包转换为文字 & 文字转换为表情包 维护两个对象来实现. 缺点:表情包大小由雪碧图中表情包大小控制,不能更改. htm ...

  8. mysql uftb8mb4 储存 emoji 表情失败

    记一次生产事故踩坑.血淋淋的惨痛教训 众所周知 mysql 存 emoji 表情要用 utf8mb4 这个字符集 OK 没问题,设置 nick_name 为 utf8mb4 varchar(50) 测 ...

  9. Emoji-Chat emoji表情包发送及显示兼容web端、移动端

    Emoji-Chat emoji表情包发送及显示兼容web端.移动端 序言 在如今聊天表情包满天飞的当下,聊天过程中想发送个表情感慨一下情绪在所难免,当下我就遇到这么个需求,希望在web端聊天室中可以 ...

  10. js文本内去除emoji表情包

    利用正则匹配emoji表情包并且去除 let Arr=['emoji

最新文章

  1. python中按钮关联两个函数_两个函数,在一个函数运行的情况下,点击按钮运行第二个...
  2. k8s 关键字以及管理流程。
  3. spring源码分析之@Conditional
  4. Dandan's lunch
  5. linux备份mysql部分表数据,linux mysql 数据按表名称备份
  6. Crash的数字表格(HYSBZ-2154)
  7. Android 自动换行流式布局的RadioGroup
  8. ajax常见特效,用ajax实现正在载入的特效-Ajax编程
  9. stm32读取驾驶模拟器数据 stm32F407读取joystick数据
  10. Matlab Tricks(二十五)—— plot 属性
  11. 用C++编写一个简易数学计算器
  12. 【面试题】Redis SETEX /SETNX 的用法和区别
  13. PERT(计划评审技术,Program Evaluation an Review Technique)
  14. Cutting Sticks
  15. html在电脑中怎么用,电脑的基本操作是什么?
  16. 计算机领域的nature,Nature:什么是量子互联网?
  17. 生成二进制反射格雷码
  18. android ftp权限,实战android手机telnet、ftp登陆,权限修改
  19. Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取,多附件发送)
  20. 让百度快速收录新网站的方法是什么 让百度快速收录新网站的方法有哪些

热门文章

  1. 数据库服务器的安装与配置
  2. 显示当前数据库服务器的ip,怎么查看服务器数据库的ip地址
  3. mip-html自动跳转页面,MIP建站系统常见问题汇总
  4. Java基础视频教程(2020年最新)
  5. 电脑裸奔-中木马-QQ被盗-大团圆结局(QQ申诉艰难旅程)
  6. 以模块方式加载 UVC 驱动
  7. 用 dfuse `transaction_lifecycle` 端点跟踪任何交易,包括延期交易
  8. STM32通过USB方式烧录程序DFU详解 ( 使用新版本的DFU工具 DfuSe_Demo_V3.0.5_Setup 测试ok 2018-7-27 改)
  9. 你真的知道如何使用Target.Count吗?
  10. 那,那,那,轻灵的舞影,绝美的身姿──对上古绚丽舞姿的乱谈