emoji表情存儲到數據庫的方法


方案1:修改數據庫編碼

為什么我們設置表的的字符類型為utf8卻不能存放emoji呢?
原來utf8可能是2或3或4個字節,而mysql的utf8是3個字節,存放一個emoji是需要4個字節的,自然不夠。
Mysql數據庫在5.5.3之后開始支持utf8mb4字符集,所以mysql版本是5.5.3+的都可以設置讓數據庫存儲Emoji表情,如果你的應用有移動端的,最好一開始設計數據庫的時候就使用utf8mb4字符集,當然沒用的也可以通過如下方式修改:


編輯mysql配置文件
vim /etc/my.cnf
添加下面代碼

[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4

在mysql中執行以下命令修改環境變量

set character_set_client = utf8mb4;
set character_set_connection = utf8mb4;
set character_set_database = utf8mb4;
set character_set_results = utf8mb4;
set character_set_server = utf8mb4;

 

查看是否修改成功,執行如下sql語句
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

修改已經建立表的字符集
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;
至此數據庫的配置就完成了,在代碼連接數據庫之后還需要執行

SET names utf8mb4
這樣就可以自此 Emoji 表情了。

 

方案2:轉義emoji表情

如果嫌上述方案麻煩,還要操作數據庫最初的類型。那么這種方法適合你。

原理:轉義成字符串放入到數據庫,使用的時候反轉義可以直接轉義成表情,再把內容傳進去就。

//對emoji表情轉義
function emoji_encode($str){
    $strEncode = '';
    $length = mb_strlen($str,'utf-8');
    for ($i=0; $i < $length; $i++) {
        $_tmpStr = mb_substr($str,$i,1,'utf-8');    
        if(strlen($_tmpStr) >= 4){
            $strEncode .= '[[EMOJI:'.rawurlencode($_tmpStr).']]';
        }else{
            $strEncode .= $_tmpStr;
        }
    }
    return $strEncode;
}
//對emoji表情轉反義
function emoji_decode($str){
    $strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function($matches){  
        return rawurldecode($matches[1]);
    }, $str);
    return $strDecode;
}

 

文章參考:

讓你的網站支持 Emoji (https://segmentfault.com/a/1190000003074856)
如何讓emoji存放到數據庫中 (http://blog.csdn.net/u011957758/article/details/53074205)

 

版權聲明:本文采用署名-非商業性使用-相同方式共享(CC BY-NC-SA 3.0 CN)國際許可協議進行許可,轉載請注明作者及出處。
本文標題:emoji表情存儲到數據庫的方法
本文鏈接:http://www.cnblogs.com/sochishun/p/7755354.html
本文作者:SoChishun (郵箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)
發表日期:2017年10月30日


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM