ssm+mysql保存emoji使用总结

项目中需要实现聊天功能,需要满足emoji表情的保存。在实现过程中也也遇到很多坑,找了更多博客才解决了问了,大概整理了下,需要的步骤。

实现我找到了两种方法:
方法一:修改字符编码把utf8修改为utf8mb4(用sqlyog工具演示)
使用条件:
MySQL版本不能小于5.5.3
mysql connector5.1.13为最低要求
在这里插入图片描述

1、修改数据库字符集
在这里插入图片描述
在这里插入图片描述
sql命令:(****表示你自己的数据库名称)

ALTER DATABASE **** CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

2、修改表字符集
在这里插入图片描述
在这里插入图片描述
sql命令:(****表示你自己的表名称)

ALTER TABLE **** CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3、修改你要保存emoji表情的字段字符集
在这里插入图片描述
在这里插入图片描述
sql命令:(****表示你自己的表名称,####表示字段名)

ALTER TABLE **** CHANGE #### VARCHAR(225) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4、修改数据库配置

打开mysql的配置文件my.ini,添加以下信息

[mysqld]

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect = 'SET NAMES utf8mb4'

character-set-client-handshake = false


[client]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

5、重启MySQL

6、jdbcurl中不要配置characterEncoding=UTF-8,我配置了一致保存不了

mysql.jdbcurl=jdbc:mysql://127.0.0.1:3306/dolphin_v3?zeroDateTimeBehavior=convertToNull&useUnicode=true

7、若果使用mybatis还需要配置连接池

https://blog.csdn.net/z69183787/article/details/71196197

方法二:字Java代码代码中把utf8mb4字符的emoji转化成utf8保存到MySQL

   /* 将emoji标签转换成utf8字符集保存进数据库
    * @param str
    * @return
    */
    public String emojiConvert(String str) {
        String patternString = "([\\x{10000}-\\x{10ffff}\\ud800-\\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb, "[[" + URLEncoder.encode(matcher.group(1), "UTF-8") + "]]");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 还原utf8数据库中保存的含转换后emoji表情的字符串
     * 
     * @param str
     * @return
     */
    public String emojiRecovery(String str) {
        String patternString = "\\[\\[(.*?)\\]\\]";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb, URLDecoder.decode(matcher.group(1), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                return "";
            }
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

这个两个方法在网上找的,找不到原地址了。

三、展示效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值