前段時(shí)間做項(xiàng)目遇到APP評(píng)論中有 emoji 表情符號(hào),結(jié)果導(dǎo)致插入 MySQL 數(shù)據(jù)庫(kù)失敗,時(shí)隔好久了,現(xiàn)在整理一下。
如果要實(shí)現(xiàn)存儲(chǔ) emoji 表情到 MySQL 實(shí)例,需要應(yīng)用客戶端、到 MySQL 實(shí)例的連接、MySQL 實(shí)例內(nèi)部 3 個(gè)方面統(tǒng)一使用或者支持 utf8mb4 字符集。
注:關(guān)于 utf8mb4 字符集,請(qǐng)參考 utf8mb4 字符集(4字節(jié) UTF-8 Unicode 編碼)
客戶端需要保證輸出的字符串的字符集為 utf8mb4。
注:utf8mb4只是MySQL中的概念,因?yàn)镸ySQL的UTF-8并不是真正意義上的UTF-8,我們的應(yīng)用中只要使用UTF-8就可以了。
以常見(jiàn)的 JDBC 連接為例:
對(duì)于 JDBC 連接,需要使用 MySQL Connector/J 5.1.13(含)以上的版本。
JDBC 的連接串中,不配置 characterEncoding 選項(xiàng)。連接器會(huì)自動(dòng)匹配識(shí)別字符集。
注:關(guān)于 MySQL Connector/J 5.1.13,請(qǐng)參考 MySQL 官方 Release Notes
比如
url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&zeroDateTimeBehavior=convertToNull
這里使用VI來(lái)修改,輸入命令:vi /usr/my.cnf 回車(chē);打開(kāi)文件后按“i”鍵進(jìn)入編輯狀態(tài);
在“[mysqld]”下面添加“character_set_server=utf8mb4”,按Esc鍵進(jìn)入命令模式,輸入“:wq”回車(chē)(保存并退出)。
macOS下的路徑可能是:/usr/local/mysql/my.cnf
注意:必須重新啟動(dòng) MySQL 實(shí)例;
可以使用工具來(lái)設(shè)置數(shù)據(jù)庫(kù)屬性:
create table emoji_table (
id int auto_increment primary key,
content varchar(255)
) default charset utf8mb4;
String sqlCharset = "set names utf8mb4"
Statement statment = conn.createStatement();
resultSet = statment.executeQuery(sqlCharset);
聯(lián)系客服