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的配置,配置文件位置各不相同,不再累赘。

image.png

修改点就一个,mysqld上加个character-set-server = utf8mb4,就这一个而已。

然后修改数据库、这个表、这个字段的字符集类型为utf8mb4,ok了。

验证:


字段设置
存储

第二种方式也称应用层解决方案

base64可以用java.util.Base64,也可以用apache提供的。

你可能感兴趣的:(mysql中存储带特殊符号的微信昵称)