MySQL 解決 emoji表情 的方法,使用utf8mb4 字符集(4字節 UTF-8 Unicode 編碼)

1、基本原則
若是要實現存儲 emoji 表情到 MySQL 實例,須要應用客戶端、到 MySQL 實例的鏈接、MySQL 實例內部 3 個方面統一使用或者支持 utf8mb4 字符集。mysql

注:關於 utf8mb4 字符集,請參考 utf8mb4 字符集(4字節 UTF-8 Unicode 編碼)spring

2、三個條件的說明
一、應用客戶端
客戶端須要保證輸出的字符串的字符集爲 utf8mb4。sql

注:utf8mb4只是MySQL中的概念,由於MySQL的UTF-8並非真正意義上的UTF-8,咱們的應用中只要使用UTF-8就能夠了。數據庫

二、應用到 RDS MySQL 實例的鏈接
以常見的 JDBC 鏈接爲例:
對於 JDBC 鏈接,須要使用 MySQL Connector/J 5.1.13(含)以上的版本。
JDBC 的鏈接串中,不配置 characterEncoding 選項。鏈接器會自動匹配識別字符集。
注:關於 MySQL Connector/J 5.1.13,請參考 MySQL 官方 Release Notes
好比工具

url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&zeroDateTimeBehavior=convertToNull
三、MySQL 實例配置
3.一、修改my.cnf配置文件
這裏使用VI來修改,輸入命令:vi /usr/my.cnf 回車;打開文件後按「i」鍵進入編輯狀態;
在「[mysqld]」下面添加「character_set_server=utf8mb4」,按Esc鍵進入命令模式,輸入「:wq」回車(保存並退出)。學習

macOS下的路徑多是:/usr/local/mysql/my.cnf編碼

注意:必須從新啓動 MySQL 實例;url

3.二、設置庫的字符集爲 utf8mb4
可使用工具來設置數據庫屬性:code

3.三、設置表的字符集爲 utf8mb4server

create table emoji_table (
    id int auto_increment primary key,
    content varchar(255)
)  default charset utf8mb4;
3、經過 set names 命令設置會話字符集
對於 JDBC 鏈接串設置了 characterEncoding 爲 utf8 或者作了上述配置仍舊沒法正常插入 emoji 數據的狀況,建議在代碼中指定鏈接的字符集爲 utf8mb4,樣例代碼以下:

String sqlCharset = "set names utf8mb4"
 
Statement statment = conn.createStatement();
 
resultSet = statment.executeQuery(sqlCharset);
注: set names utf8mb4; 命令會將 character_set_client、character_set_connection、character_set_results 3個會話字符集相關變量均設置爲 utf8mb4,以保證寫入或者讀出的數據使用 utf8mb4 字符集進行解釋。

 

 

spring.datasource.connectionInitSqls=set names utf8mb4

相關閱讀

utf8mb4 字符集(4字節 UTF-8 Unicode 編碼)

CentOS下安裝MySQL,Windows下使用Navicat for MySql鏈接

MySQL學習(二)圖形界面管理工具Navicat for MySQL安裝和使用 ---------------------   

相關文章
相關標籤/搜索