目录

MySQL 支持 emoji 图标的设置

MySQL-5.5 之前, UTF8 编码只支持 1-3 个字节,只支持 BMP 这部分的 Unicode 编码区,而 Emoji 图标恰好是 4 个字节的编码进行存储。从 MySQL-5.5 开始,可支持 4 个字节 UTF 编码 utf8mb4,一个字符最多能有 4 字节,所以能支持更多的字符集。所以要解决问题,必需把数据库表字符编码全部改成 utf8mb4

常用字符集

Unicode:是字符集,而没有编码方式 UTF-8:是一种 Unicode 字符集的编码方式,其他还有 UTF-16UTF-32

  • ASCII - American Standard Code for Information Interchange:美国信息交换标准代码,主要用于显示现代英语和其他西欧语言。单字节编码,7 位表示一个字符,共 128 个字符
  • GBK - Chinese Internal Code Specification:汉字内码扩展规范。双字节编码,共收录了 21003 个汉字,共有 21885 个字符,兼容 GB2312-80 标准
  • UTF-8 - 8-bit Unicode Transformation Format:针对 Unicode 的可变长度字符编码,又称万国码。UTF-816 个字节编码 Unicode 字符,如果 UNICODE 字符由 2 个字节表示,则编码成 UTF-8 很可能需要 3 个字节。而如果 UNICODE 字符由 4 个字节表示,则编码成 UTF-8 可能需要 6 个字节。Unicode 一个中文字符占 2 个字节,而 UTF-8 一个中文字符占 3 个字节
  • utf8mb4 - 8-bit Unicode Transformation Formatutf8mb4 兼容 utf8,能支持更多的字符集,MySQL5.5.3 之后增加了这个编码。most bytes 4 是专门用来兼容四字节的 Unicode,也就是说能存储四个字节,处理 emoji 表情毫无压力

操作

设置成 utf8mb4 请根据实际情况而定,没有必要全部都设置为 utf8mb4

将数据库,数据表,数据表字段设置为 utf8mb4

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 更改数据库的编码方式
ALTER DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

// 更改数据表的编码方式
ALTER TABLE test.demo CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

// 更改数据表的字段编码方式
ALTER TABLE test.demo
  CHANGE `title` `title` VARCHAR(80) CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci DEFAULT '';

ALTER TABLE test.demo
  MODIFY `title` VARCHAR(80) CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci DEFAULT '';

查看设置

查看数据库设置情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
SHOW VARIABLES
WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

// 结果
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_general_ci
collation_database       utf8mb4_general_ci
collation_server         utf8mb4_general_ci

查看数据表设置情况

1
SHOW FULL COLUMNS FROM test.demo;

参考