mysql表情符怎么存储 mysql存储特殊表情

input保存emoji发送javaCopyright ? 1999-2020, CSDN.NET, All Rights Reserved
打开APP
制造bug的键盘钢琴师
关注
Java中解决app传的emoji表情的多种方式 原创
2019-01-26 17:58:13
2点赞
制造bug的键盘钢琴师
码龄5年
关注
今天项目遇到的一个问题,APP订单评论提交emoji表情的话会报错 , 由于需要实现emoji表情评论的功能,根据自己实现的方式以及查询的实现方式,现总结为一下几种
mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情 。
实现方式一
对APP传入后端的数据包括字符串和emoji表情 , 把emoji表情和String都进行Base64转换 , 存储在数据库中 , 取的时候再转换回来即可解决上述问题,这是最快也是最简单的解决方法 。
1、最适合应用场景:
h5或者android开发中通常会遇到一种场景,当用手机输入法输入Emoji表情符的时候,由于数据库不支持,保存时这些表情符号就会被过滤掉以至于无法显示,android和h5开发中可以使用Base64算法解决这个问题 。
2、使用工具:
使用Apache commons codec 类Base64
3、引入jar包:
加入jar包依赖(如果是maven项目就直接在pom文件中加入下边内容,若不是就加入对应jar包)
dependency
groupIdcommons-codec/groupId
artifactIdcommons-codec/artifactId
version1.6/version
/dependency
4、加密解密实现:
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;
}
}
1
1
实现方式二
mysql 字符集utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储 。只要修改mysql数据库的编码格式变为utf8mb4即可
具体方法可参考连接
这种方式后台不用再做额外的操作,直接正常存储即可,但是修改数据库会比较麻烦
实现方式三
通过emoji-Java解决数据库不能存储4字节表情符号
mysql数据库想支持emoji表情可不可以不改数据库的字符集可以,从数据库查完后用iconv或mb_convert_encoding转换字符编码,但最好还是从数据库层面去解决
怎么在mysql存储特殊字符在sql中给所有字段值加上mysql_real_escape_string函数处理mysql表情符怎么存储,作用就是给特殊字符进行转义mysql表情符怎么存储 , 具体说明网上找
$sql="update `qqaide_ini` set `键值`='" . mysql_real_escape_string($keynamearr[$i+1]) . "' WHERE `PCHash`='" . mysql_real_escape_string($PCHash) . "' and `小节`='" . mysql_real_escape_string($notename) . "' and `键名`='" . mysql_real_escape_string($keynamearr[$i]) . "'";

推荐阅读