emoji字符的存储与应用方案

现在应用大量的地方会使用到emoji表情,例如微信昵称,聊天内容,好友请求等等。如果还是使用ut8会出现乱码,因为UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节, utf8mb4则扩展到一个字符最多能有4字节,并且兼容utf8,唯一的缺点就是占用存储空间会比ut8大一点。

如果采用在代码内碰到emoji字符时进行编码处理,一个系统涉及到的地方实在太多,并且需要多个端同步配合(服务端、移动端、web等),灵活性差,容易出bug。
比较好的解决方案是, 在数据库直接存存储emoji字符,然后在服务端连接数据库时设置pdo连接(或其它连接方式)字符集,用户端这样就不用做任何处理便可以顺利的存储和读取emoji,具体步骤如下:

1、修改数据库配置 my.cnf

[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4

2、重启mysql,检查字符集

mysql > SHOW VARIABLES  WHERE Variable_name  LIKE  ' character\_set\_% '  OR Variable_name  LIKE  ' collation% ';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------

3、修改php连接的pdo字符集

开始之前,请确保你已经安装了 PHP PDO 扩展和你所使用的数据库的 PDO 驱动(例如 MySQL 的 pdo_mysql)。对于使用关系型数据库来讲,这是基本要求。

驱动和扩展安装可用后,打开 config/db.php 修改里面的配置参数对应你的数据库配置。该文件默认包含这些内容:

<?php

return [
    'class' => 'yiidbConnection',
    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8mb4',
];

4、修改具体字段的字符集
例如用户昵称需要存放emoji表情,修改用户表的昵称字段
ALTER TABLE t_user MODIFY COLUMN nickname varchar(255) CHARACTER SET utf8mb4 not NULL DEFAULT '' COMMENT '昵称'

做完以上四步就可以安心的在客户端使用emoji来保存个性昵称、发送个性信息、以及日志记录也不会出现问题了!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值