问题
在mysql中添加emoji表情可能会报错,原因是因为数据库默认是UTF-8编码格式,普通的字符串占位3个字节而表情占位4字节,此时UTF-8就不够用了,需要采用utf8mb4字符集。
注意:utf8mb4是utf8的超集,兼容utf8所以大可放心更改
解决方案
需要做以下配置解决这个问题
1.修改mysql目录下的my.ini文件(linux系统为etc目录下的my.cnf文件)
添加以下代码
[client]
default-character-set=utf8mb4
[mysql]
设置mysql默认字符集
default-character-set=utf8mb4
[mysqld]
设置mysql字符集服务器
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4
2.全局修改字符集
set global character_set_client = utf8mb4;
set global character_set_connection = utf8mb4;
set global character_set_database = utf8mb4;
set global character_set_results = utf8mb4;
set global character_set_server = utf8mb4;
set global collation_server = utf8mb4_general_ci;
set global collation_database = utf8mb4_general_ci;
set global collation_connection = utf8mb4_general_ci;
3.修改数据库、表、字段的字符集为utf8mb4_unicode_ci
修改数据库字符集:
ALTER DATABASE 数据库名称 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
修改表的字符集:
ALTER TABLE 表名称 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改字段的字符集:
ALTER TABLE 表名称 MODIFY 字段名称 字段类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4.重启mysql服务
net stop mysql
net start mysql
5.检查字符集是否修改成功
SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’;
如果是下面这张图这个样子就成功了,value都变成了utf8mb4,如果value还是utf8则没修改成功
注意
1.即使mysql已经成功将字符集修改为utf8mb4,但在navicat和workbench中仍然还是utf8
你可以再次使用 SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’; 进行查看。
因此:不要直接在数据库操作工具(navicat、workbench)里面直接插入emoji表情,否则会报错。
2.emoji存入成功后在mysql、navicat、workbench可能仍会显示问号,但是不影响
在浏览器可以正常显示。
更多推荐