美文网首页程序员
配置MySQL使之支持存储Emoji

配置MySQL使之支持存储Emoji

作者: 程点 | 来源:发表于2018-07-25 03:34 被阅读0次

前几天在写博客的过程中遇到了关于Emoji在MySQL中存储的问题,查阅了一些资料,特做整理。

什么Emoji

在阮一峰大神的博客中,对Emoji做了一些通俗易懂的介绍。大意如下

  • Unicode 标准化:现在的Emoji就是字符的一种,它会被渲染为图形
  • 不同的系统有不同的渲染实现

在MySQL中存储的问题

Emoji需要4个字节存储,而MySQL中的utf8只支持1-3个字节,在MySQL 5.5之后增加了utf8mb4字符集,可最多存储4个字节,所以要想能正常使用Emoji,得保证MySQL的版本不小于5.5,然后再对数据库做相应的配置。

查看MySQL版本

  1. 在终端下输入命令
mysql -V
  1. 或者在MySQL中输入命令 status
mysql> status;

如果MySQL版本不小于5.5,可以正式开始配置
一: 修改 my.cnf
(Linux系统中路径一般为 /etc/mysql/my.cnf)
my.cnf文件末尾添加以下几行

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

然后保存my.cnf文件

二: 修改相关数据库及数据表
将已有数据库转换为utf8mb4

mysql> ALTER DATABASE my_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

将已经建好的表也转换utf8mb4

mysql> ALTER TABLE my_tb_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改需要使用emoji的字段:

mysql> ALTER TABLE my_tb_name MODIFY COLUMN my_column_name  varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

三:重启数据库
Ubuntu下一般为:

sudo systemctl restart mysql

四:登录数据库检查设置

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character%' 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                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8mb4_general_ci         |
| collation_database       | utf8mb4_unicode_ci         |
| collation_server         | utf8mb4_unicode_ci         |
+--------------------------+----------------------------+
11 rows in set (0.01 sec)

如果 character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server 几个字段为utf8mb4,便说明配置成功了。

五:修改连接配置
如果是JDBC连接,去掉characterEncoding参数,并保证MySQL connector版本高于5.1.13,其它连接类似。


配置完MySQL之后,以后新建数据库和数据表都不需要再做额外的utf8mb4配置了(当然了,大量使用utf8mb4相对utf8来说肯定会有一些性能的影响)
在MySQL中可以查询数据表的详细信息,命令如下

mysql> use db_name;
mysql> show full columns from tb_name;

例如:


mysql> show full columns from post;
+--------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field        | Type         | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+--------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id           | bigint(20)   | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| create_time  | datetime     | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
| last_modify  | datetime     | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
| content      | text         | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| content_html | text         | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| img          | varchar(255) | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| summary      | text         | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| title        | varchar(255) | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| category_id  | bigint(20)   | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
| user_id      | bigint(20)   | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
+--------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
10 rows in set (0.00 sec)

本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明: 作者staneyffer,首发于我的博客,原文链接: https://chengfy.com/post/2

相关文章

网友评论

    本文标题:配置MySQL使之支持存储Emoji

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