Mysql Emoji表情处理

2017-06-12  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读