解决微信用户昵称有emoji表情符号插入数据库问题

2017-8-22 / 0评 / Java

解决微信登录信息昵称有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表情符号插入数据库问题”