mysql不支持emoji表情的問題的解決方法


最近財神圈項目集成微信登錄功能的過程中,當保存用戶有昵稱含有表情符號時后台服務拋出異常,原來是數據庫默認字符集不支持emoji表情字符。找到問題的原因后,因為之前也沒有遇到過這樣的問題,也沒思路,迅速百度大神找了一大堆資料來,原來僅只要將數據庫及相關的表和表字段設置為utfmb84即支持emoji表情的。

問題的原因是數據庫中使用的字符編碼為UTF-8,這種編碼有可能是兩個、三個、四個字節。Emoji表情是4個字節,而mysql的utf8編碼最多3個字節,所以數據插不進去,而utfmb64是支持四個字節的。所以解決方案就是:將mysql編碼從utf8轉換成utf8mb4。

現將解決的思路和步驟分享一下,為了改過之前寫文章過於草率,盡量將所找的資料和我的實戰經驗寫得完整一下以示尊重讀者。

1,檢測你的數據庫版本,數據庫版本需>=5.5.3版本.

如何察看mysql版本如下圖,我安裝的是mysql下的一個開源分支mariadb,版本10.0對應的是mysql版本5.6以上,所以是支持的。

2,如果你的mysql服務正在啟動中,請右擊我的電腦-管理-服務,關閉mysql server這個服務。

3,設置數據庫默認支持字符集utf8mb4,

找到mysql安裝目錄下的my.cnf或者mysql.ini,修改my.cnf或mysql.ini

[client]
 default-character-set = utf8mb4

[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'

4,重啟mysql server

檢查字符集

mysq>SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

 5,存在的數據庫的字符集是utf8的,如果要支持utf8mb64則需要將已經存在的數據庫、表、表字段類型修改成支持utf8mb64.

修改數據庫字符集:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改表的字符集:

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改字段的字符集:

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

6,這步可有可無,前提是如果使用到 spring boot的連接池,請在spring boot 的配置文件application.properties設置連接使用utf8mb64

spring.mysql.datasource.init-sql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

7,設置連接驅動的JDBC_URL

修改如jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
這里請注意如果數據庫版本大於5.1.13驅動程序connector不能加characterEncoding=utf8,一定要去掉characterEncoding=utf8。

以上步驟測試過很多表的相關字段均都完美解決。


免責聲明!

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



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