侧边栏壁纸
博主头像
侯秀荣

贪婪和恐惧是人性的两大弱点,
人类几万年,人性也没进步1厘米。

  • 累计撰写 172 篇文章
  • 累计收到 3 条评论

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

2017-8-22 / 0 评论 / 2888 阅读

解决微信登录信息昵称有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_infoMODIFY 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;
    }




评论一下?

OωO
取消