SSM框架+MySql保存emoji表情

本博客的記錄的操做在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

    他使用一種折中的方式,對存儲的內容編碼後保存,取出後再解碼,相對較爲麻煩,但也不失爲一種解決方式

相關文章
相關標籤/搜索