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

方案1:修改數據庫編碼

爲何咱們設置表的的字符類型爲utf8卻不能存放emoji呢?
原來utf8多是2或3或4個字節,而mysql的utf8是3個字節,存放一個emoji是須要4個字節的,天然不夠。
Mysql數據庫在5.5.3以後開始支持utf8mb4字符集,因此mysql版本是5.5.3+的均可以設置讓數據庫存儲Emoji表情,若是你的應用有移動端的,最好一開始設計數據庫的時候就使用utf8mb4字符集,固然沒用的也能夠經過以下方式修改:html


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

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

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

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;
至此數據庫的配置就完成了,在代碼鏈接數據庫以後還須要執行vim

SET names utf8mb4
這樣就能夠自此 Emoji 表情了。segmentfault

 

方案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;
}

 

文章參考:url

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

 

版權聲明:本文采用署名-非商業性使用-相同方式共享(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日

相關文章
相關標籤/搜索