美文网首页
Mysql Emoji表情处理

Mysql Emoji表情处理

作者: 初秋夏末 | 来源:发表于2017-06-12 15:32 被阅读115次

    1.转码存储

    将内容转码存储 如:转成 Unicode 存储,取出来时在解码

    2.过滤 Emoji PHP

    function filterEmoji($str)
    {
        $str = preg_replace_callback('/./u', function (array $match) {
        return strlen($match[0]) >= 4 ? '' : $match[0];
        }, $str);
    
        return $str;
    }
    

    3.MySQL存储Emoji

    使用MySQL存储Emoji, 只需要数据表的字符集为 utf8mb4 即可, 即 CHARSET=utf8mb4 .
    Mysql>=5.5


    查看MySQL说支持的所有字符集

    mysql> show charset;
    

    查看某张表当前的字符集

    mysql> show create table <table_name>;
    

    修改数据库字符集

    alter database <db_name> default charset = utf8mb4;
    

    获取 修改表字符集 语句

    SELECT CONCAT('alter TABLE ',TABLE_NAME,' default charset = utf8mb4;') 
    FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='<db_name>' AND TABLE_TYPE='BASE TABLE';
    

    获取 修改表里面字段字符集 语句

    SELECT CONCAT('alter TABLE ',TABLE_NAME,' convert to character set utf8mb4;') 
    FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='<db_name>' AND TABLE_TYPE='BASE TABLE';
    

    MySql 出现错误


    1067 - Invalid default value for 'created_at'

    修改默认的 Mysql 配置

    > sudo vi /etc/mysql/my.cnf
    

    在 [mysqld] 区域添加:

    sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    

    1071 - Specified key was too long; max key length is 767 bytes

    原因

    MySql的varchar索引只支持不超过768个字节 或者 768/3=256个三字节的字段 或者 768/4=192个四字节 字> 段 而 utf8mb4 是四字节的,UTF-8是三字节的。

    决解

    设置合适的索引

    参考


    http://www.jb51.net/article/88805.htm
    https://laravel-china.org/topics/2094/invalid-default-forcreated-atresolved-value

    相关文章

      网友评论

          本文标题:Mysql Emoji表情处理

          本文链接:https://www.haomeiwen.com/subject/iyvlqxtx.html