emoji表情解決方案

記錄一下:一個英文字母佔位1個字節,一個漢字佔位2個字節,一個字節8位(二進制)

回覆帖子時,回覆內容帶有輸入法中的表情時,無法成功回覆
問題分析:通過fiddler抓包,找到回覆評論的API:1.0/replycomment,當回覆表情時,request和response數據如下:
這裏寫圖片描述

結合API程序分析,推測是表情存入discuz_cn.pre_forum_post數據庫時發生異常。
爲了測試方便,在本機電腦的MySQL數據庫中新建同樣類型的數據庫表(列名及類型也一樣)如下所示:

這裏寫圖片描述
這裏寫圖片描述

執行插入操作:插入失敗,報錯信息如下所示:
這裏寫圖片描述

初步判斷是表情存入數據庫時,發生異常。查閱資料分析發現:普通字符串或表情都是佔位3個字節,而utf8每個字節最多3個字節,但是移動端的表情符號佔位是4個字節,普通的utf8就不夠用了。應該設置字符集爲utf8mb4, 該字符集每個字節最多4個字節,剛好可以存儲。
解決方案:修改相應的utf8字符集爲utf8mb4
(1).修改表字段字符集爲utf8mb4:
ALTER TABLE emoji MODIFY message TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改後,再執行插入命令依然報錯。
(2).再去修改表字符集爲utf8mb4:
ALTER TABLE emoji CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改後,再執行插入命令依然報錯。
(3).再修改數據庫的字符集爲utf8mb4
mysql> set character_set_client= utf8mb4;
mysql> set character_set_connection= utf8mb4;
mysql> set character_set_database= utf8mb4;
mysql> set character_set_results= utf8mb4;
mysql> set character_set_server= utf8mb4;
插入數據庫成功
這裏寫圖片描述

這裏寫圖片描述

‘message’字符集改爲了utf8mb4.

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章