让mysql支持emoji

emoji表情是通用的unicode字符串,不需要第三方工具支持,就可以显示丰富的表情图标,emoji表情由4个字节组成,mysql的utf8是3个字符,因此当emoji表情存入mysql数据库时会报错,通过一些设置可以让mysql支持emoji表情。

1.utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。
查看mysql版本的方法有:
在终端下:mysql -V
在mysql中:mysql> status;
使用mysql的函数:select version();
2.修改database、table和column字符集。参考以下语句:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
可以根据需要,在数据库层、表层或者字段层设置utf8mb4
3.修改mysql配置文件my.cnf(windows为my.ini)
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4′

修改参数后需要重启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 |
+————————–+——————–+
rows in set (0.00 sec)

特别说明下:collation_connection/collation_database/collation_server如果是utf8mb4_general_ci,没有关系。但必须保证character_set_client/character_set_connection/character_set_database/character_set_results/character_set_server为utf8mb4。

5.如果你用的是java服务器,升级或确保你的mysql connector版本高于5.1.13,否则仍然无法使用utf8mb4
mysql连接字符串可参考:jdbc:mysql://localhost/dbname?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
6.如果不打算重启mysql数据库,可以在数据库连接池中设置,建立连接后执行
SET NAMES utf8mb4,如DruidDataSource:

<property name="connectionInitSqls">
  <list>
    <value>set names utf8mb4</value>
  </list>
</property>

使用Navicat等客户端,如果查询出来的数据是乱码,也可先执行SET NAMES utf8mb4,然后再进行查询。

阿里云上面的mysql数据库,可以参考阿里云的官方文档:https://help.aliyun.com/knowledge_detail/5990076.html
emoji的表情列表,可参考:http://getemoji.com/

发表评论

电子邮件地址不会被公开。 必填项已用*标注