【数据库】MySQL如何储存特殊字符或表情
一、发现问题
最近做的一个项目会自动获取用户昵称,但遇到昵称是特殊字符或表情时,后端会因存不到数据表而报错。
二、分析问题
原来是编码原因,UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去
- 使用utf8mb4字符集
- mysql的版本必须为v5.5.3或更高
- 把数据库的编码改成utf8mb4 – UTF-8 Unicode
- 然后需要存储emoji表情的字段选择utf8mb4_general_ci
- 数据库连接也需要改为utf8mb4
三、解决问题
(暂未找到解决办法,以后会更新这篇博文)
参考内容:
- php将手机表情转码utf8,PHP如何处理emoji表情存入utf8的数据库
- JAVA微信开发-如何保存包含特殊字符的微信昵称
- 微信昵称有特殊符号怎么保存到mysql库里?
1
2
3
4
5
6// 入库之前,使用 Base64 编码
String nickname = request.getParameter("nickname");
nickname = Base64.encodeBase64String(nickname.getBytes("utf-8"));
// 出库后,使用 Base64 解码
nickname = new String(Base64.decodeBase64(nickname.getBytes()), "utf-8");
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 百里飞洋!
若存在错误或不当之处,还望兄台不吝赐教,期待与您交流!
评论