問(wèn)題:
微信昵稱(chēng)中有表情符號(hào),在獲取到微信個(gè)人信息保存到mysql時(shí),格式不支持導(dǎo)致保存失敗。
現(xiàn)象:

微信昵稱(chēng)帶表情
錯(cuò)誤:
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端,客戶(hù)端,DB
2、數(shù)據(jù)庫(kù)存base64,base64連圖片都能搞,一個(gè)表清應(yīng)該是ok的,只不過(guò)需要存儲(chǔ)的時(shí)候encode,拿出來(lái)再decode
解決方案:
果斷采用第一種啊,并實(shí)踐證明,是科學(xué)+合理+快捷的方式。
修改mysql的配置,配置文件位置各不相同,不再累贅。

image.png
修改點(diǎn)就一個(gè),mysqld上加個(gè)character-set-server = utf8mb4,就這一個(gè)而已。
然后修改數(shù)據(jù)庫(kù)、這個(gè)表、這個(gè)字段的字符集類(lèi)型為utf8mb4,ok了。
驗(yàn)證:

字段設(shè)置

存儲(chǔ)
第二種方式也稱(chēng)應(yīng)用層解決方案
base64可以用java.util.Base64,也可以用apache提供的。