解决微信用户昵称有emoji表情符号插入数据库问题
解决微信登录信息昵称有emoji表情符号插入数据库问题:
org.springframework.jdbc.UncategorizedSQLException:
### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x91\x80' for column 'nick_name' at row 1
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: INSERT INTO wx_user_info
1. 修改my.ini [mysqld] character-set-server=utf8mb4
2. 在Connector/J的连接参数中,不要加characterEncoding参数。 不加这个参数时,默认值就时autodetect。
3. 将已经建好的表也转换成utf8mb4
命令:ALTER TABLE `wx_user_info` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (将 wx_user_info 替换成你的表名)
4. 将需要使用emoji的字段设置类型为:
命令:ALTER TABLE `wx_user_info`MODIFY COLUMN `nick_name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
以上描述是一种解决方案,但是在我自己管理的项目中使用的是另一种unicode编码方式解决这个问题。数据库表还是是默认使用utf8。解决方案如下:
导入URLEncoder类,将包含emoji表情的字段进行encode编码处理后保存到表中。调用显示处理的时候在解码输出emoji格式返回。
import java.net.URLEncoder;
/***处理用户昵称*/ private List<WXUserInfo> processUserInfo(List<WXUserInfo> userInfos) { for (WXUserInfo userInfo :userInfos) { try { /**昵称包含表情处理*/ if(StringUtils.isNotBlank(userInfo.getNickName())){ userInfo.setNickName(URLEncoder.encode(userInfo.getNickName(),"utf-8")); } /**城市特殊字符*/ if(StringUtils.isNotBlank(userInfo.getCity())){ userInfo.setCity(URLEncoder.encode(userInfo.getCity(),"utf-8")); } /**国家特殊字符*/ if(StringUtils.isNotBlank(userInfo.getCountry())){ userInfo.setCountry(URLEncoder.encode(userInfo.getCountry(),"utf-8")); } /**省份特殊字符*/ if(StringUtils.isNotBlank(userInfo.getProvince())){ userInfo.setProvince(URLEncoder.encode(userInfo.getProvince(),"utf-8")); } } catch (UnsupportedEncodingException e) { userInfo.setNickName("微信昵称"); logger.error("处理粉丝名称异常",e); } } return userInfos; }
本文共计 2105 字,感谢您的耐心浏览与评论。
0条回应:“解决微信用户昵称有emoji表情符号插入数据库问题”