[遇到的坑]使用java向mysql中插入emoji表情失败

这个问题,原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1

网上的解决思路:在插入之前执行一条update语句:set names utf8mb4

但是我使用jdbcTemplate依然无法解决,最后只能绕个弯,换一个思路

  • 把字符串直接Base64编码存库,取得时候再去解码,成功解决问题.

工具分享给大家:

/**
     * 编码
     *
     * @param originStr
     * @return
     */
    private String encoder(String originStr) {

        if (StringUtils.isBlank(originStr)) {
            return originStr;
        }
        try {
            BASE64Encoder encoder = new BASE64Encoder();
            byte[] bytes = originStr.getBytes("UTF-8");
            String encode = encoder.encode(bytes);
            return encode;
        } catch (UnsupportedEncodingException e) {
            LOGGER.error(" encode error str {},e{}", originStr, e);
            return originStr;
        }
    }
private String decoder(String originStr) {
        BASE64Decoder decoder = new BASE64Decoder();
        if (StringUtils.isNotEmpty(originStr)) {
            try {
                originStr = new String(decoder.decodeBuffer(originStr), "UTF-8");
            } catch (IOException e) {
                LOGGER.error(" decode error , e{}", e);
                return originStr;
            }
        }
        return originStr;
    }

你可能感兴趣的:([遇到的坑]使用java向mysql中插入emoji表情失败)