微信昵称中有表情符号,在获取到微信个人信息保存到mysql时,格式不支持导致保存失败,怎么解决?
问题:
微信昵称中有表情符号,在获取到微信个人信息保存到mysql时,格式不支持导致保存失败。
现象:
错误:
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB2\xE6\x97...' for column 'nick_name' at row 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[alk-wxapi.jar:na]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[alk-wxapi.jar:na]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[alk-wxapi.jar:na]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:975) ~[alk-wxapi.jar:na]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1114) ~[alk-wxapi.jar:na]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:854) ~[alk-wxapi.jar:na]
... 82 common frames omitted
解决思路:
1、修改mysql的配置,不外乎server端,客户端,DB
2、数据库存base64,base64连图片都能搞,一个表清应该是ok的,只不过需要存储的时候encode,拿出来再decode
解决方案:
果断采用第一种啊,并实践证明,是科学+合理+快捷的方式。
修改mysql的配置,配置文件位置各不相同,不再累赘。
修改点就一个,mysqld上加个character-set-server = utf8mb4
,就这一个而已。
然后修改数据库、这个表、这个字段的字符集类型为utf8mb4
,ok了。
验证:
第二种方式也称应用层解决方案
base64可以用java.util.Base64,也可以用apache提供的。