Mysql解決微信特殊符號暱稱入庫報錯亂碼
環境聲明
Mysql5.7
思考亂碼原因
- 自己代碼和微信編碼不統一
- 自己代碼傳輸到數據庫序列化,到數據庫反序列化編碼不統一
- 數據庫接受到數據庫後存入數據庫亂碼(數據庫反序列化和數據庫編碼級不統一)
怎麼解決
解決亂碼唯一手段,保證編碼統一
解決自己代碼和微信編碼統一
保證代碼操作序列化微信返回參數和微信編碼統一(默認utf-8),這部分問題,可以通過斷點,日誌輕鬆排查出來
解決代碼傳輸到數據庫,序列化反序列化問題
- 設置mysql 連接url 千萬帶 characterEncoding=UTF-8
-
錯誤例子:
datasource: master: url: jdbc:mysql://XX/demo-database?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
-
原因: 特殊表情需要utf8mb4,你這樣設置會讓數據庫客戶端代碼,認可是utf-8,入庫特殊符號就會亂碼
-
- 如果url連接不設置默認的序列化類型,那具體序列化應該用那個類型,這個我們可以在數據庫設置
-
打開數據庫
vim /etc/my.conf
, 添加如下內容# 設置客戶端序列化默認編碼級 [client] default-character-set = utf8mb4 # 設置mysql默認編碼級 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
systemctl restart mysqld
,根據自己安裝類型,重啓,指令只是在centos7,yum安裝mysql重啓方法 -
解決數據庫編碼級
新建數據庫保證數據庫編碼級是 utf8mb4
通過以上手段,保證數據編碼一致,可以解決微信特殊符號暱稱亂碼問題