Emoji表情字符现在在APP已经广泛支持了。但是MySQL的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常:
Java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8E' for column 'nick' at row 1
1
原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节。
解决的方案有两种:
使用utf8mb4的mysql编码来容纳这些字符。
过滤掉这些特殊的表情字符。
方法1:使用utf8mb4的mysql编码来容纳这些字符
注意:要使用utf8mb4类型,首先要保证Mysql版本要不低于 MySQL 5.5.3。
第一步:在mysql的安装目录下找到my.ini,作如下修改
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
修改后重启Mysql
第二步:将已经建好的表也转换成utf8mb4
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;
1
将TABLE_NAME替换成你的表名。然后就OK了。
网上流传的一个版本增加了一个步骤,就是以root身份登录Mysql,修改环境变量,将
character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server
1
都修改成utf8mb4。不过我没有做这一步,也正常,所以可能是这一步是多余的。
方法2:过滤掉这些特殊的字符
import org.apache.commons.lang.StringUtils;
public class charUtil {
/**
* 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案 ��
*/
public static String removeFourChar(String content) {
byte[] conbyte = content.getBytes();
for (int i = 0; i < conbyte.length; i++) {
if ((conbyte[i] & 0xF8) == 0xF0) {
for (int j = 0; j < 4; j++) {
conbyte[i + j] = 0x30;// 0x30 int=48   字符=0
}
i += 3;
}
}
content = new String(conbyte);
return content.replaceAll("0000", "");
}
/**
* 将emoji表情替换成*
* @return 过滤后的字符串
* 过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。
*/
public static String filterEmoji(String source) {
if (StringUtils.isNotBlank(source)) {
return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");
} else {
return source;
}
}
public static void main(String[] arg) {
try {
System.err.println("测试->将emoji表情替换成*");
String text = "This is a smiley \uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 ";
System.out.println(text);
System.out.println(text.length());
System.out.println(text.replaceAll("[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]", "*"));
System.out.println(filterEmoji(text));
//输出结果
//This is a smiley �� face�� �� �� �� �� �� ��
//45
//This is a smiley * face�� �� �� �� �� �� ��
//This is a smiley * face* * * * * * *
System.err.println("测试->替换四个字节的字符 '\\xF0\\x9F\\x98\\x84\\xF0\\x9F)的解决方案 ��");
String title = "ff的范德萨分��������Llfldakf;dsk。f������������daslfjdsa;lfkjdsd'j'l'f'k'd'j'sa'l'k";
System.out.println(removeFourChar(title));
//输出结果:ff的范德萨分Llfldakf;dsk。fdaslfjdsa;lfkjdsd'j'l'f'k'd'j'sa'l'k
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

转载于:https://www.cnblogs.com/bxcsx/p/10764262.html

【MySQL】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案...相关推荐

  1. 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F

    mysql 库.表.字段 字符集从 utf8 改为 utf8mb4 校验规则改为 utf8mb4_unicode_ci

  2. mysql存储移动端emoji表情 报错Incorrect string value: '\xF0\x9F\x98\x82'

    原因:mysql utf8存储2-3个字节 移动端的emoji表情为4个字节 方法: 1.修改my.cnf 文件 加入 [client] default-character-set = utf8mb4 ...

  3. emoji表情mysql报错_MySql存储emoji表情报错的处理方法

    mysql存储emoji表情报错的处理方法:更改编码为utf8mb4 uft-8编码可能2个字节.3个字节.4个字节,而MySql的uft-8只支持3字节的数据,而移动端的表情数据是4字节的字符.如果 ...

  4. 【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 ...

  5. Mysql 解决emoji表情处理问题 - Incorrect string value: ‘\xF0\x9F\x92\x94‘ for column

    Mysql 解决emoji表情处理问题 - Incorrect string value: '\xF0\x9F\x92\x94' for column 参考文章: (1)Mysql 解决emoji表情 ...

  6. mysql xf0x9fx8ex88_【MySQL】存储emoji表情报错(Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...')的解决方案...

    Emoji表情字符现在在APP已经广泛支持了.但是MySQL的UTF8编码对Emoji字符的支持却不是那么好.所以我们经常会遇到这样的异常: Java.sql.SQLException: Incorr ...

  7. JAVA连接mysql字段插入中文报错Incorrect string value: ‘\xXX\xXX\xXX\xXX‘ for column ‘xxx‘

    解决方案 数据库字符集使用utf8mb4 表字符集使用utf8mb4 如果报错字段类型为longtext,需要在数据库连接字符串中增加参数clobCharacterEncoding=utf-8

  8. 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0......

    原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对 ...

  9. MySQL插入数据 报错Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题

    有时候我们在往数据库中输入信息时,如果输入的内容是中文,会报错"Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column&q ...

最新文章

  1. ITSM五大趋势助力企业数字化转型
  2. 回溯算法(八皇后问题)
  3. caffe problem
  4. 浅谈Java中的数据类型以及面向对象
  5. java小细节_为什么我喜欢Java的细节
  6. OpenJudge NOI 1.7 10:简单密码
  7. 今天没事做了个MBTI职业倾向测试
  8. Vue计算属性的_set与get方法_实现双向数据传递---vue工作笔记0006
  9. matlab图片包微盘,如何用Matlab绘制二维图形资料下载
  10. 实验四+074+林盼皇
  11. 深度学习神经网络的预测间隔
  12. 【3dmax千千问】初学3dmax插件神器第20课:3dmax渲染教程|效果图大师和疯狂模渲大师怎么使用3dmax软件自带的渲染器去设计并渲染三维效果图场景的3dmax模型?
  13. 蔡康永的说话之道总结
  14. Keep不甘做“工具人”
  15. 【Spring】IOC:基于注解的IOC容器初始化源码分析
  16. 【NOTE】python3.6下scons运行提示找不到SCons.Script解决方式
  17. 2月28日,鸿蒙群友见面会活动回顾
  18. 为什么onenote一直在加载_OneNote: 沉睡于电脑中的宝藏笔记软件,高效管理你的学习生活...
  19. 第四章:软件总体设计(4)此章结完
  20. WebGL实时视频(5) awrtc.js理解并修改

热门文章

  1. 7-6 列车调度 (25 分)
  2. 我的周刊(第021期)
  3. 配置linux服务器XShell命令大全
  4. java -jar 设置jvm参数_java8 常用JVM 参数修改
  5. CNN逆卷积层(ConvTranspose2d)输出有马赛克网格
  6. 酒店数据集退订分析与预测
  7. 微信开发转换html5,Html5调用企业微信的实现
  8. 微信小程序动画(五):倾斜
  9. MYSQL语句汇总 转载
  10. [新知速递04] flex布局设置主轴/侧轴对其方式 总结梳理