关于使用MySQL存储表情的问题与解决
问题描述
1、我们在使用MySQL存储emoji时,如果会报下面的错误:
原因分析
MySQL数据库默认是UTF-8编码格式,普通的字符串占位3个字节而表情需要占位4字节,此时UTF-8就不够用了,这时候需要采用utf8mb4字符集才能解决,其实现在开发中UTF-8也开始慢慢不建议使用了,可以参考一下下面这文章;
https://mp.weixin.qq.com/s/S0aJ4SKP8IXRKULukgRXEQ
问题解决
所以我们现在目的就是把MySQL的编码格式修改为utf8mb4(mysql5.3.3版本以上)就行了;
可以使用sql直接修改,下面分别修改数据库字符集、修改表字符集、修改表字段字符集;
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE table_name CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
这边以修改表字段字符集为例子解决该问题,下面是test表结构
sql语句:
ALTER TABLE test CHANGE name name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
插入问题解决:
补充
在实际开发中,我们应该提前约定好字符集,而不是后面随意更改,随意更改可能会影响到原有数据显示问题;可以更改mysql默认配置,将其设为utf8mb4具体操作如下:
1、修改mysql配置文件(windows:my.ini;linux:my.cnf)
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] #character-set-server=utf8 这行注释掉 character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_general_ci init_connect = 'SET NAMES utf8mb4'
2、重启mysql
service mysql restart1
3、查看是否修改成功
SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';
下图红框内为utf8mb4信息即为修改成功