mysql中emoji表情存储

背景

在mysql 5.7.19,创建的数据库默认选择的编码是utf8 -- UTF-8 Unicode,因此字段默认的编码为utf-8,但在项目开发中存在一个需求:在某个字段中存储混有emoji表情的字符串,此时以普通编码格式如utf8来存储emoji表情时,会报

org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement
... Caused by: org.hibernate.exception.GenericJDBCException: could not execute statement
... Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x95\xE2\x80...' for column 'android_id' at row 1
  • 请求的实例

解决方案

  1. android_id这个字段的编码格式改为:utf8mb4,如在Navicat中修改:

  2. 修改mysql的配置

Windows下:在my.ini配置文件的[mysqld]下面添加:character_set_server=utf8mb4

  1. 重启mysql服务

在服务中找到mysql,点击重启

以上三步操作后就可以愉快的存储emoji表情啦。

小结

utf8与utf8mb4的区别:

  • UTF-8编码中,一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。
  • UTF8MB4:MySQL在5.5.3之后增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。因此可以用来存储emoji表情。

拓展

  • 当同时对编码类型为utf8validated字段 和utf8mb4android_id 字段联合查询时

在spring data jpa中查询会报该异常

 List<Toilet> findByAndroidIdAndValidated(String androidId, boolean flag);

异常如下

Caused by: java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

而在Navicat中使用sql查询并不会报错

SELECT * FROM `toilet` where android_id = 'Miss.龙												

最新文章

  1. 通过Wireshark抓包进行Cookie劫持
  2. [bzoj1007][HNOI2008][水平可见直线] (斜率不等式)
  3. SpringMVC Controller介绍
  4. NET中MSMQ的使用----附例子
  5. Sqlmap注入技巧集锦
  6. springmvc的一个小例子学习(一)
  7. DeepID人脸识别算法之三代(转)
  8. UVA 558 Wormholes
  9. Android 开机动画源码分析
  10. 跟着刚哥梳理java知识点——集合(十二)
  11. 《Python编程从入门到实践》_第四章_操作列表
  12. Spring源码情操陶冶-ContextLoader
  13. pt-tcp-model
  14. Verilog语言实现并行(循环冗余码)CRC校验
  15. 关于ipv6被拒的问题
  16. requests.session
  17. 关于公众平台接口不再支持HTTP方式调用的公告
  18. Pycharm+Django搭建第一个Python Web程序
  19. JQuery Easyui引入easyui-lang-zh_CN.js后出现乱码的问题解决方法
  20. yield return:使用.NET的状态机生成器

热门文章

  1. Python--day65--模板语言之tags
  2. Oracle备库宕机启动解决方案
  3. Python--day37--多进程中的方法join()
  4. 12627 - Erratic Expansion——[递归]
  5. The solution to duplicated code
  6. linux 处理器特定的寄存器
  7. 轮播图模块(vue)
  8. Codeforces Round #524 (Div. 2) codeforces 1080A~1080F
  9. 使用FluentEmail发送outlook邮件
  10. windows系统锁屏及修改密码项目开发经验记录