1. 程式人生 > >MySQL 解決 emoji表情 的方法,使用utf8mb4 字符集(4位元組 UTF-8 Unicode 編碼)

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

前段時間做專案遇到APP評論中有 emoji 表情符號,結果導致插入 MySQL資料庫失敗,時隔好久了,現在整理一下。

一、基本原則

如果要實現儲存 emoji 表情到 MySQL 例項,需要應用客戶端、到 MySQL 例項的連線、MySQL 例項內部 3 個方面統一使用或者支援 utf8mb4 字符集。

注:關於 utf8mb4 字符集,請參考 

二、三個條件的說明

1、應用客戶端

客戶端需要保證輸出的字串的字符集為 utf8mb4。

注:utf8mb4只是MySQL中的概念,因為MySQL的UTF-8並不是真正意義上的UTF-8,我們的應用中只要使用UTF-8就可以了。

2、應用到 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

3、MySQL 例項配置

3.1、修改my.cnf配置檔案

這裡使用VI來修改,輸入命令:vi /usr/my.cnf 回車;開啟檔案後按“i”鍵進入編輯狀態;
在“[mysqld]”下面新增“character_set_server=utf8mb4”,按Esc鍵進入命令模式,輸入“:wq”回車(儲存並退出)。

macOS下的路徑可能是:/usr/local/mysql/my.cnf

注意:必須重新啟動 MySQL 例項;

3.2、設定庫的字符集為 utf8mb4

可以使用工具來設定資料庫屬性:


3.3、設定表的字符集為 utf8mb4

create table emoji_table (
    id int auto_increment primary key,
    content varchar(255)
)  default charset utf8mb4;

三、通過 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 字符集進行解釋。

相關閱讀