概况

问题

我一般新建数据库时,字符集选用utf-8,校对规则选用utf8_general_ci

然而最近我发现如果存放的数据里面有Emoji表情符号时,会报错无法把数据添加到数据库中

原因

我查了一下utf-8字符集不支持存入Emoji表情符号,要存入Emoji表情符号则要使用utf8mb4字符集,然后校对规则使用utf8mb4_unicode_ci,所以一开始创建数据库时推荐使用utf8mb4字符集

其它说明

MySQL数据库的字符集以及校对规则和数据表的关系:

表默认使用数据库的字符集和校对规则,也可以选择其它的(可以和数据库的不一样),不过建议弄成一样的

修改过程

先备份数据库

在进行任何修改之前,请确保对数据库进行备份,以防止意外数据丢失

选中要操作的数据库

1
USE 你的数据库名称;

查看字符集和校对规则

修改之前先看一下当前数据库是什么字符集和校对规则

1
2
3
4
5
#查看字符集
SHOW VARIABLES LIKE 'character_set_database';

#查看校对规则
SHOW VARIABLES LIKE 'collation_database';

开始修改数据库

要将数据库字符集修改为 utf8mb4,并使用 utf8mb4_unicode_ci 校对规则,可以执行以下命令,然后再使用上面命令看修改后的字符集和校对规则

1
ALTER DATABASE 你的数据库名称 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

修改数据表

修改数据库的字符集和校对规则后,数据表的字符集和校对规则不会随之变化,我们可以使用下面命令修改

1
ALTER TABLE 你的数据表名称 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

重启MySQL服务

一般不需要修改,我修改数据库的字符集和校对规则后不重启也生效了,如果不生效的话可以尝试重启MySQL服务