记录解决emoji表情存入myql数据库报错

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包)


<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;
}

}


猜你喜欢

转载自blog.csdn.net/hanhx1993/article/details/80840985