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替換成你的表名)