本博客的記錄的操做在linuxmysql
項目中須要從微信獲取受權來登陸,在此過程,保存微信emoji表情暱稱到mysql數據庫的時候出了錯誤。linux
老規矩百度一下,得知是mysql的utf8字符集只支持1-3個字節的字符,而表情則須要4個字節,因此mysql提供了一個utf8mb4字符集,在支持4個字節的同時又能夠完美兼容utf8,免去咱們的後顧之憂。sql
百度大部分的步驟是這樣的,1-3步驟可使用命令也可使用工具(例如Navicat)來完成。數據庫
1:修改數據庫字符集:windows
(1) 命令方式:ALTER DATABASE 數據庫名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;微信
(2)工具方式:選中指定數據庫,郵件選擇數據庫屬性,修改字符集與排序規則以下:mybatis
2:修改數據庫表的字符集工具
(1)命令方式: 首先切換到步驟1所操做的數據庫,隨後執行命令:ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;編碼
(2)工具方式: 打開數據庫,選擇要操做的表,右鍵選擇設計表,選擇選項,選擇字符集和排序規則以下:設計
3:修改列的字符集
(1)命令方式: ALTER TABLE 表名 CHANGE 字段名 該字段原來的數據類型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
例:ALTER TABLE user CHANGE name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(2)工具方式: 選中要操做的表,右鍵選擇設計表,選擇指定字段,修改字符集和排序規則以下:
4:修改my.cnf文件(windows是my.ini文件)
編輯文件,添加如下內容:
[client] default-character-set=utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect=’SET NAMES utf8mb4' [mysql] default-character-set=utf8mb4
5:最後還須要重啓一下mysql哦。
上述方式適用於普通的mysql使用表情的問題。若是使用mybatis作持久層操做,可能會碰到更坑的問題,這些你都配置了,依然不會成功。找了不少資料,終於發現一位博主的解答,鏈接池的配置中能夠添加這麼一個配置:
<property name="connectionInitSqls"> <list> <value>set names utf8mb4</value> </list> </property>
最後,固然是完美的解決了。
很想貼上最後這位博主的連接~但找遍了歷史記錄也沒能找到,恨忘記收藏~~~
若是沒法經過以上方式解決問題,能夠參考下這問簡書博友的文章:https://www.jianshu.com/p/b0f5eb5d7cc3
他使用一種折中的方式,對存儲的內容編碼後保存,取出後再解碼,相對較爲麻煩,但也不失爲一種解決方式