当前位置: 首页 > news >正文

开发避坑指南(29):微信昵称特殊字符存储异常修复方案

异常信息

Cause: java.sql.SQLException: 
Incorrect string value: '\xF0\x9F\x8D\x8B\xE5\xBB...' for column 'nick_name' at row 1

在这里插入图片描述

异常背景

抽奖大转盘,抽奖后需要保存用户抽奖记录,用户再次进入游戏时根据抽奖记录判断剩余抽奖机会。保存抽奖记录时需要保存用户open_id,昵称,抽奖时间等信息,保存昵称时异常,没有成功记录抽奖导致剩余机会不减,用户可多次抽奖。

保存接口请求参数:
在这里插入图片描述

异常分析

昵称包含特殊字符,数据库定义的数据类型、字符集不支持,所以保存失败了。

解决办法

MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。低版本的MySQL

支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了,其中Emoji表情是四个字节,导致插不进去。

解决这个办法可以从数据库层面上解决,即修改数据库的字段定义,如下方案1;或者从应用层面解决,如下方案2。

方案1:修改数据库字段字符集

mysql数据库中,将nick_name字段字符集由utf8修改为utf8mb4,数据库链接中将字符集由utf8改为utf8mb4。如下:

url: "jdbc:mysql://localhost:3306/big-turntable?useUnicode=true&characterEncoding=utf8mb4&useSSL=false"

查看日志和数据库,插入不再异常。

方案2:使用 Base64 编码与解码昵称

//Base64编码保存昵称
String nickname = record.getNickName();
if(stringutil.isNotEmpty(nickname)){nickname = Base64.getEncoder().encodeTostring(nickname.getBytes( charsetName: “utf-8));record.setNickName(nickname);
}   //Base64解码昵称
if(stringutil.isNotEmpty(record.getNickName())){String nickName =record.getNickName();String nickName = new String(Base64.getDecoder().decode(nickName), 	 charsetName: "UTF-8");nickNameMap.put(record.getPriceId(),nickName);
}
http://www.lryc.cn/news/626462.html

相关文章:

  • 多模型创意视频生成平台
  • 微美全息(NASDAQ:WIMI):以区块链+云计算混合架构,引领数据交易营销科技新潮流
  • Linux: network: arp: arp_accept
  • imx6ull-驱动开发篇29——Linux阻塞IO 实验
  • Java并发容器详解
  • ubuntu go 环境变量配置
  • uv,下一代Python包管理工具
  • ⭐CVPR2025 给3D高斯穿 “UV 衣” 框架[特殊字符]
  • grpc 1.45.2 在ubuntu中的编译
  • 【软考架构】软件工程:软件项目管理
  • 氢元素:宇宙基石与未来能源之钥的多维探索
  • HTML <meta name=“color-scheme“>:自动适配系统深色 / 浅色模式
  • 简笔成画:让AI绘画变得简单而有趣
  • 基于隐函数定理的偏导数计算及其C++实现
  • Vue3 学习教程,从入门到精通,基于 Vue 3 + Element Plus + ECharts + JavaScript 开发图书销售网站(42)
  • K8S-Ingress资源对象
  • Linux-文本搜索工具grep
  • Nginx 负载均衡和缓存配置
  • 栈的概念(韦东山学习笔记)
  • java17学习笔记-switch总结
  • 服务器硬盘进行分区和挂载
  • 《CDN加速的安全隐患与解决办法:如何构建更安全的网络加速体系》
  • CSDN技术探讨:GEO(生成式引擎优化)如何助力品牌在AI搜索中脱颖而出
  • 有向图(Directed Graph)和有向无环图(Directed Acyclic Graph,DAG)代码实践
  • mRNA 的修饰方式有哪些?它们分别作用于哪些位置?
  • strncpy 函数使用及其模拟实现
  • 医疗AI与医院数据仓库的智能化升级:异构采集、精准评估与高效交互的融合方向(上)
  • Model Context Protocol (MCP) - 尝试创建和使用一下MCP Client
  • 软件测试:如何利用Burp Suite进行高效WEB安全测试
  • 制造业原料仓储混乱?WMS 系统实现物料精准溯源,生产更顺畅_