• 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日

  • 相关阅读:
    mybatis数组和集合的长度判断及插入
    Getting Started with JavaFX
    抛出 NoClassDefFoundError: javax/validation/constraints/Size 问题的解决方法
    slf4japi整合maven 工程日志配置文件
    一场因OpenJDK引发的血案 之JavaFx
    Spring Boot logback springProperty 设置默认值
    java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive
    Linux curl命令使用代理、以及代理种类介绍
    Mybatis异常_03_Invalid bound statement (not found)
    Spring Boot 中文乱码问题解决方案汇总
  • 原文地址:https://www.cnblogs.com/sochishun/p/7755354.html
Copyright © 2020-2023  润新知