有emoji的地方就有了注意事項

emoji是啥?

下面是摘自維基百科的一段解釋:


繪文字(英語:emoji,日語:絵文字/えもじ emoji)是使用在網頁和聊天中的形意符號,最初是日本在無線通信中所使用的視覺情感符號(圖畫文字)。意指圖形,文字則是圖形的隱喻,可用來代表多種表情,如笑臉表示笑、蛋糕表示食物等。在中國大陸,繪文字通常叫做“小黃臉”,或者叫emoji。

太抽象?其實emoji就是我們使用了多年的QQ、微信裡的表情符號。

有emoji的地方就有了注意事項

emoji表情符號

emoji引發的問題

emoji給我們帶來了傳圖達意的便捷,但是卻令開發者很頭疼,插入數據庫報錯:Incorrect string value: \\xF0\\x9F\\x98\\x84\\xF0\\x9F

項目中有一部分要與微信打交道,需要獲取掃碼用戶的暱稱信息,而有些用戶暱稱裡含有表情符號,當插入mysql數據庫時,就報出了Incorrect string value的錯誤。

錯誤原因

mysql數據庫默認採用了utf8字符集,utf8字符集最多支持三個字節,而emoji佔用4個字節的存儲空間,所以在存入數據庫時,就引發了錯誤。

自從mysql 5.5.3版本後,有了一種每個字符使用4個字節的字符集utf8mb4,utf8mb4是utf8的一個超集,兼容utf8,所以將字符集由utf8轉為utf8mb4即可解決這個問題。

解決方案

1. 修改mysql配置文件my.cnf(windows server的話,修改my.ini),增加以下設置

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

character-set-server = utf8mb4

2. 按需修改數據庫、表、字段的字符集

-- 修改數據庫字符集

ALTER DATABASE databaseName CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;

-- 修改表字符集

ALTER TABLE tableName CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

-- 修改列字符集

ALTER TABLE tableName CHANGE columnName VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

3. 改動後重啟mysql數據庫即可

注意:

如果你使用的是雲數據庫,那麼會有稍許區別,以騰訊云為例:找到MySQL數據庫,在實例列表,參數設置部分,找到character_set_server參數,默認是latin1,點擊修改,將其改動為utf8mb4,改動完保存後,會自動重啟mysql數據庫以使修改生效。重啟完成後,通過客戶端連接,改動相應的表或者數據庫字段為utf8mb4即可。

有emoji的地方就有了注意事項

騰訊雲mysql

總結

  1. 由於mysql 5.5.3版本才增加了utf8mb4字符集,如果低於該版本,需要先進行升級,並評估是否影響已有生產環境。

  2. 在項目之初選擇mysql服務器時,應根據項目需要提前規劃mysql的版本以及字符集,如果有需要,提前將其設置為utfmb4字符集。

  3. 雲服務器將這些參數全部界面化了,如果通過命令行改動不了(沒有權限等錯誤),就考慮到應該在界面上進行操作,而不要一個勁的去排查為啥沒有權限。


分享到:


相關文章: