mysql存储emoji表情的时候,就会报错,如下:

Error updating database. Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘这是我表中的字段’ at row 1

初步定位是我的数据库是utf8编码,不支持emoji表情,需要改成utf8mb4编码

具体原因:

emoji表情需要4个字节存储
mysql的utf8编码的一个字符最多3个字节,所以不够了就报错

解决如下

1.mysql将字符集 utf8改utf8mb4:

ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2.修改数据源配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="${mysql.url}" /><property name="username" value="${mysql.user}" /><property name="password" value="${mysql.password}" /><!-- 设置编码,支持表情存储--><property name="connectionInitSqls" value="set names utf8mb4;"/>
</bean>

扩展:

1、mysql编码:utf8和utf8mb4的区别:

看官网文档:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

utf8mb4: A UTF-8 encoding of the Unicode character set using one to four bytes per character.
utf8mb4: Unicode字符集的UTF-8编码,每个字符使用1到4个字节。
utf8mb3: A UTF-8 encoding of the Unicode character set using one to three bytes per character.
utf8mb3: Unicode字符集的UTF-8编码,每个字符使用一到三个字节。
utf8: An alias for utf8mb3.
utf8: utf8mb3的别名。

UTF-8是使用1~4个字节,一种变长的编码格式。
MySQL中的utf8是utfmb3,只有三个字节,节省空间但不能表达全部的UTF-8,只能支持“基本多文种平面”(Basic Multilingual Plane,BMP)。

总结:编码一般都使用utf8mb4。

utf8扩展,除了mb3,mb4,还有以下:

ucs2: The UCS-2 encoding of the Unicode character set using two bytes per character.
ucs2: Unicode字符集的UCS-2编码,每个字符使用两个字节。
utf16: The UTF-16 encoding for the Unicode character set using two or four bytes per character. Like ucs2 but with an extension for supplementary characters.
utf16: Unicode字符集的UTF-16编码,每个字符使用两个或四个字节。就像ucs2一样,但是有一个补充字符的扩展。
utf16le: The UTF-16LE encoding for the Unicode character set. Like utf16 but little-endian rather than big-endian.
utf16le: Unicode字符集的UTF-16LE编码。类似于utf16,但是是little-endian(小端)而不是big-endian(大端)。
utf32: The UTF-32 encoding for the Unicode character set using four bytes per character.
utf32: Unicode字符集的UTF-32编码,每个字符使用四个字节。

2、mysql排序:utf8_bin和utf8_general_ci和utf8_unicode_ci的区别

ci是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做成一样的;
bin 是二进制, a 和 A 会别区别对待.
utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法,一些字符还是不能支持。
SELECT * FROM user WHERE name = 'a’查询时,
使用utf8_bin排序就找不到name = 'A’的那行
使用utf8_general_ci排序就能找到name = 'A’的那行

整理:utf8_bin区分大小写,utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性也够我们用的了

总结:排序一般都使用utf8_general_ci

mysql数据库支持emoji表情的详解相关推荐

  1. mysql数据库支持emoji表情特殊字符

    文章目录 一.背景问题 二.window下设置utf8mb4 1.修改mysql配置文件 2.重启mysql服务 3.设置库.表字符集 三.linux下设置utf8mb4 1.修改配置 2.重启服务 ...

  2. linux下mysql数据库基础及客户端命令详解

    linux下mysql数据库基础及客户端命令详解 1.mysql数据库存储引擎: SHOW ENGINES;   #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: ...

  3. oracle数据库中的系统自带表情_教你如何让数据库支持emoji表情符存储

    一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...

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

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

  5. 【笔记11】uniapp点击复制;mysql数据库存储emoji表情;Java 二维码生成;uniapp引入自定义图标

    目录 前言 一.uniapp 实现点击复制某段文本 二.MySQL 数据库存储 emoji 表情 三.Layui 的富文本编辑器 四.谷歌 Java 二维码生成 (1) 引入 MAVEN 依赖 五.微 ...

  6. MYSQL数据库与Emoji表情的故事

    问题背景 手机上众多输入法和键盘支持输入 emoji 表情,给早期设计的程序造成了越来越多的干扰. 移动端购物的流行,2018 年 "双十一"全网移动端交易达到 93.6% 微信年 ...

  7. mysql数据库性能优化—my.cnf详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  8. Mysql数据库存储emoji表情

    一.起源 我想让我的新闻评论内容能更加丰富~话不多说. (1)改变Navicat中的字段的字符集 然后发现还是没办法存进去正确的emoji表情嘞.(失败了) (2)找到mysql数据库配置文件    ...

  9. mysql数据库自动备份脚本(详解)

    脚本内容: #!/bin/bash #功能说明:本功能用于备份mysql数据库 #编写日期:2018/05/17 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/loc ...

最新文章

  1. Java开发的几个注意点
  2. sap中Excel的模版上传和下载
  3. Java初学者推荐学习书籍free下载
  4. golang定时任务的使用
  5. 077 Combinations 组合
  6. 【渝粤教育】国家开放大学2018年秋季 2115T人体解剖学与组织胚胎学 参考试题
  7. MyBatis可视化代码生成工具
  8. Microsoft Edge导出浏览历史记录
  9. Android仿人人客户端(转)
  10. 斑马Zebra 110Xi4 打印机驱动
  11. String StringBuffer StringBuild区别?
  12. 彻底解决Chrome自动更新方案
  13. HDU 6143 Killer Names【容斥定理】【排列组合】
  14. 与浏览网站的访客直接进行QQ对话
  15. 程序媛 :逛 GitHub 开源项目吗? 很沙雕的那种!
  16. 如何写出高质量的文章:从战略到战术
  17. CREO图文教程:三维设计案例之足球设计图文教程之详细攻略
  18. Ubuntu 18.04 LTS 安装JDK1.8-Linux-64
  19. Linux 重启网络服务
  20. 头条的动态页面爬取+百度下拉搜索框

热门文章

  1. 一个XML转换的例子
  2. 欧几里得算法及其扩展
  3. JAVA-配置path环境
  4. background-size 兼容ie8以下浏览器的方法
  5. [问题解决] LaTex Error:Unknown graphics extension:.eps
  6. postgresql数据类型转换
  7. 如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?
  8. 牛客21781 牛兄牛弟
  9. python-字典方法
  10. 基本的Windows相关的DOS命令