utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常:
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1
解决1:修改数据库,表,字段的编码为utf8mb4
修改my.ini文件
1. 修改my.cnf 或 my.ini [mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 修改后重启Mysql
由于修改配置文件可能影响较多项目,所以没用此方法。
解决2:采用base64加解密
3、引入jar包:
加入jar包依赖(如果是maven项目就直接在pom文件中加入下边内容,若不是就加入对应jar包)
扫描二维码关注公众号,回复:
3973898 查看本文章
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.6</version>
</dependency>
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
/**
* 将String类型的字符串进行base64编码与解码,使用utf-8
*/
public
class Base64Util {
private
static
final Logger logger = LoggerFactory.getLogger(Base64Util.class);
/**
* 对给定的字符串进行base64加密
*/
public static String encodeData(String inputData) {
try {
if (
null == inputData) {
return
null;
}
return
new String(Base64.encodeBase64(inputData.getBytes(
"utf-8")),
"utf-8");
}
catch (UnsupportedEncodingException e) {
logger.error(inputData, e);
}
return
null;
}
/**
* 对给定的字符串进行base64解密
*/
public static String decodeData(String inputData) {
try {
if (
null == inputData) {
return
null;
}
return
new String(Base64.decodeBase64(inputData.getBytes(
"utf-8")),
"utf-8");
}
catch (UnsupportedEncodingException e) {
logger.error(inputData, e);
}
return
null;
}
}