emoji表情存入数据库的乱码问题详解
从mysql读取emoji表情显示?的问题详解
写作目的
- 原有数据库已经设计好,且已经存入过数据,现在也想存入emoji表情,不适合编码存入,解码输出。所以选择修改数据库字符集的方法,utf8mb4 [footnote]
执行方法
- 数据库修改
配置文件修改my.cnf
[client]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = false
character-set-server = utf8mb4
init_connect='SET NAMES utf8mb4'
[mysql]
default-character-set = utf8mb4
数据库、表、字段修改
ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
use xxxdb;
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE 表名 CHANGE 字段名 字段名 该字段原来的数据类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 程序引用时设置取值方法
set names utf8mb4
- 导入导出注意事项
mysqldump –default-character-set-utf8mb4 –u 用户名 –p 数据库名 > 导出该文件的物理路径;导入的命令不需要指明编码格式,只需要正常的执行命令便可
总结:这样修改之后,就可以保存emoji数据了,在程序修改db文件的时候,需要确定是在版本库的文件,没有忽略提交的文件,否则存入成功,取出会一直显示问号(?)。如果存入就是问号,那说明配置没有成功,需要再次重启mysql,或者关闭再启动