微信昵称保存失败,百度的所有方案也没解决我的问题!

项目场景:

需求是把app的一些页面需要迁移到公众号去,具体的业务就不阐述了.搬迁的话需要解决用户信息的问题,所有首先就需要实现微信账号和app账号进行一个绑定!


问题描述

开发测试过程中都比较顺利,直到上线后发现微信绑定账号的时候报错了(非必现),找运维拿到了日志如下:

Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x90\xB1 C…’ for column ‘nick_name’ at row 1

uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: ‘\xF0\x9F\x90\xB1 C…’ for column ‘wx_nick_name’ at row 1; nested exception is java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x90\xB1 C…’ for column ‘wx_nick_name’ at row 1
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)


原因分析:

看到报错是很明显,编码问题嘛。这个问题一看就是常规问题,百度一下就能解决哇!

百度帖子基本的方案:
修改表、修改字段都试了还是不行,关键是我可以直接把表情复制到库里面,却不能通过ibatis插入,到这里我就知道是程序的问题了。

  • 修改库、表、字段的编码为utf8mb4

  • 修改链接:javaCopy codeString url = “jdbc:mysql://localhost:3306/database_name?useUnicode=yes&characterEncoding=UTF-8”;

  • 还是不行就转码String content = StringEscapeUtils.escapeJava(originalContent);


解决方案:(是驱动的版本太低了,升级mysql-connector-java 8.x)

我还是说一下我解决过程中的思路吧:

  • 修改成正确编码uft8mbt,能直接通过Navicat工具把表情存到库里面,但是程序插入还是报错,懵逼了。。。。
  • 修改编码之后还是不行,改成utf8编码,然后用Navicat更新的时候发现会直接弹窗报错,这时候就确定了编码没有问题,有问题的是程序。
  • 程序那儿有问题我也不清楚,就启动了另一个项目只要编码对了就能插入表情,我这个项目就不行。
  • 将编码改成utf8两个项目都报错,但是报错的异常栈 不一样,观察了一下这些方法是sql驱动里面,最后我就确定了是驱动版本低引起的。

我原来的版本是5.1.42吧,其实不用升级版本,只需要给连接池加一个配置就行了 connection-init-sqls=SET NAMES utf8mb4(详细请看我的这篇文章【把mysql的编码设置了utf8mb4就没事儿了吗】)

你可能感兴趣的:(微信,java)