SSM框架+MySql保存emoji表情


本博客的記錄的操作在linux

 

項目中需要從微信獲取授權來登錄,在此過程,保存微信emoji表情昵稱到mysql數據庫的時候出了錯誤。

老規矩百度一下,得知是mysql的utf8字符集只支持1-3個字節的字符,而表情則需要4個字節,所以mysql提供了一個utf8mb4字符集,在支持4個字節的同時又可以完美兼容utf8,免去我們的后顧之憂。

百度大部分的步驟是這樣的,1-3步驟可以使用命令也可以使用工具(例如Navicat)來完成。

1:修改數據庫字符集:

     (1) 命令方式:ALTER DATABASE 數據庫名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

     (2)工具方式:選中指定數據庫,郵件選擇數據庫屬性,修改字符集與排序規則如下:

              

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

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM