今天进行微信绑定时,数据库一直报下面这个错误:
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\x99' for column 'f0014' at row 2
查询资料发现是因为表情导致的问题,现提供两个解决方法:
一、修改数据库的编码集。
1.一般数据的编码集是utf-8,但是utf-8不能保存表情,需要将utf8修改成utf8mb4的编码格式,并需要将表保存表情的字段修改为utf8mb4_general_ci。
my.ini作如下修改:
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改后重启Mysql
或者使用工具只修改单个表的编码格式也可以。
2.在java链接数据库的时候不要加characterEncoding参数。
这样问题就解决了,但不知道为什么这个一直不行,所以可以尝试下面一个方法,过滤掉表情。
二、字符串中过滤掉表情
import org.apache.commons.lang3.StringUtils;
/**
* 表情替换
*
* @param sourceStr 原字符串
* @param slipStr emoji表情替换成的字符串
* @return 过滤后的字符串
*/
public static String filterEmoji(String sourceStr,String slipStr) {
if(StringUtils.isNotBlank(sourceStr)){
return sourceStr.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", slipStr);
}else{
return sourceStr;
}
}