Mysql存儲emoji表情報錯

PHP + MySQL , APP提交的數(shù)據(jù)包含表情,數(shù)據(jù)庫存儲失?。。?!

mysql默認的所占字節(jié)數(shù)是3個字節(jié)的,對于大部分語言來說比如說漢字什么來說是足夠的,但是emoji表情有日本文字轉(zhuǎn)化而來,其占了4個字節(jié),所以在存儲過程中,會導(dǎo)致無法寫入數(shù)據(jù)庫mysql就會出現(xiàn)錯誤。
對于mysql5.5以上版本呢,其實支持更大字節(jié)的存儲,需修改一下數(shù)據(jù)庫的編碼方式為utf8mb4

utf8mb4 是utf8的擴展,utf8mb4兼容utf8字符集,utf8 字符的編碼、位置、存儲在utf8mb4與utf8字符集里一樣的,所以不會對有現(xiàn)有數(shù)據(jù)帶來損壞。

  • 在mysql的安裝路徑下找到,配置文件:
Linux系統(tǒng)找my.cfg文件,在windows系統(tǒng)下找my.ini 。
修改以下兩處 
[mysqld]character-set-server=utf8mb4 
[mysql] 
default-character-set=utf8mb4
重啟mysql數(shù)據(jù)庫服務(wù)。
  • 修改環(huán)境變量,將一下都修改成utf8mb4
   1、set character_set_client = utf8mb4;

   2、set character_set_connection = utf8mb4;

   3、set character_set_database = utf8mb4;

   4、set character_set_results = utf8mb4;
  • 將已經(jīng)建好的相關(guān)表也轉(zhuǎn)換成utf8mb4
執(zhí)行命令:
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (將TABLE_NAME替換成你的表名)

ok,客戶端不需要任何修改,再次提交數(shù)據(jù)表情一切正常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容