博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让musql数据库支持表情存入
阅读量:5901 次
发布时间:2019-06-19

本文共 2434 字,大约阅读时间需要 8 分钟。

hot3.png

需求:表情存入数据库

原因:uft8最多可以存储占3个字符的数据,而emoji表情数据是四个字符,因此mysql的utf8无法存储会报错

解决方法

mysql5.5.3以前版本

1.urlencode转换(缺点:每次存入和取出都要加密和解密,而且一个字符经过处理后变成了12字节)

2.base64加密(缺点:每次存入和取出都要加密和解密,而且一个字符经过处理后变成了6字节)

emoji表情的正则表达式

各种语言的字符串替换方法("[\\x{10000}-\\x{10ffff}\ud800-\udfff]", "");

 

mysql5.5.3以后版本

1.上面的加密解密同样可以用

2.修改数据库字符集utf8mb4,这个字符集是支持表情存入的

注意:数据库字符集,表字符集自动字符集,当你发现所有字符集都改了,还是不行,那么请你检查下character_set_server     utf8mb4   (让数据库允许表情存入---需要重启数据库)

 

标签转换

/**  * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)  * @param str  *            待转换字符串  * @return 转换后字符串  * @throws UnsupportedEncodingException  *             exception  */  public static String emojiConvert1(String str)          throws UnsupportedEncodingException {      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) {              LOG.error("emojiConvert error", e);              throw e;          }      }      matcher.appendTail(sb);      LOG.debug("emojiConvert " + str + " to " + sb.toString()              + ", len:" + sb.length());      return sb.toString();  }    /**  * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串  * @param str  *            转换后的字符串  * @return 转换前的字符串  * @throws UnsupportedEncodingException  *             exception  */  public static String emojiRecovery2(String str)          throws UnsupportedEncodingException {      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) {              LOG.error("emojiRecovery error", e);              throw e;          }      }      matcher.appendTail(sb);      LOG.debug("emojiRecovery " + str + " to " + sb.toString());      return sb.toString();  }

 

转载于:https://my.oschina.net/u/1858920/blog/1559703

你可能感兴趣的文章
由阿里云宕机引发的思考
查看>>
蓝桥杯C/C++ 带分数
查看>>
在C#调用C++的DLL方法(二)生成托管的DLL
查看>>
关于日期的demoJS
查看>>
利用IDEA构建springboot应用-配置文件
查看>>
SpringBoot静态资源访问
查看>>
MySQL5.7.32 通用版本安装
查看>>
POJ 1700
查看>>
AOP日志记录
查看>>
多线程--内存可见性&&原子性
查看>>
围观窗体与组件02 - 零基础入门学习Delphi24
查看>>
diplay,Position,Float 之间的关系
查看>>
javascript oo实现(转)
查看>>
蓝桥杯-最大最小公倍数
查看>>
route命令详情
查看>>
Activity跳转时生命周期跟踪
查看>>
artemplate使用
查看>>
Tableau 地图
查看>>
【Flash】spi-flash规范分析
查看>>
设计数据库时记
查看>>