怎么将emoji表情存入mysql
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么将emoji表情存入mysql相关的知识,希望对你有一定的参考价值。
参考技术A 从mysql
5.5.3
开始,mysql
支持一种
utf8mb4
的字符集,这个字符集能够支持
4
字节的
utf8
编码的字符。
utf8mb4
字符集能够完美地向下兼容
utf8
字符串。在数据存储方面,当一个普通中文字符存入数据库时仍然占用
3
个字节,在存入一个
unified
emoji
表情的时候,它会自动占用
4
个字节。所以在输入输出时都不会存在乱码的问题了。由于
utf8mb4
是
utf8
的超集,从
utf8
升级到
utf8mb4
不会有任何问题,直接升级即可;如果从别的字符集如
gb2312
或者
gbk
转化而来,一定要先备份数据库。然后,修改
mysql
的配置文件
/etc/my.cnf,修改连接默认字符集为
utf8mb4
,然后在连接数据库以后首先执行一句
sql:
set
names
utf8mb4;。
1.
修改my.cnf
或
my.ini
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改后重启mysql
登陆mysql,
show
variables
like
'character%';
可以查看编码是否已经修改成功。
2、修改数据库和数据表为相应的
utf8mb4
格式。
alter
table
table_name
convert
to
character
set
utf8mb4
collate
utf8mb4_bin;
3、在代码中,连接数据库成功后,执行
"set
names
utf8mb4"
Flask项目中向Mysql存入Emoji表情引起的Bug
Bug背景之前在写Flask入门项目Flask Mega项目的时候,一直都是用SQLite,后面切换到Mysql数据库发现在存入一些EMOJI表情符号的时候,会出现如下的报错。
Bug解决思路
刚开始觉得应该是数据库的编码的问题,因为之前也遇到数据库存入特殊符号的时候发生报错。那先查看服务器上面的数据库编码格式。
show variables like ‘%char%‘;
通过查看数据库编码发现都是utf8格式。然后查阅有关的资料,以及翻阅之前做过的笔记发现,Mysql中的utf8编码格式最多支持最多3字节的数据,而emoji表情字符是4个字节的字符,如果采用utf8的数据库插入表情字符,就会因为被截断导致无法存入到数据库。
Bug解决过程
大概理解了原理就好办了,修改数据库的编码格式,因为我是使用的是Mariadb数据库
我修改的是/etc/my.cnf,/etc/my.cnf.d/目录下的配置文件,大概修改有这几项内容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4’
然后重启mariadb数据库,进入数据库中查看是否修改成功:
修改成功,然后接着修改数据库和表的编码格式:
alter database database_name character set ‘utf8mb4‘ collate ‘utf8mb4_general_ci‘;
表格编码格式:
alter table table_name convert to character set ‘utf8mb4‘ collate ‘utf8mb4_general_ci‘;
查看是否修改成功:
修改成功!!!
重启项目然后再次写入带有Emoji表情符号的评论到数据库中,发现还是出现了问题,重新梳理了一下思路大概是因为Flask项目中的SQLAlchemy连接Mysql的编码格式错误,重新修改了一下连接数据库的编码格式:
再次重启项目重新发布评论:
大功告成,问题解决。
参考链接
https://blog.csdn.net/woslx/article/details/49685111
https://blog.csdn.net/poice00/article/details/52129351
以上是关于怎么将emoji表情存入mysql的主要内容,如果未能解决你的问题,请参考以下文章
mysql数据库怎么存入emoji表情,更改utf8mb4后为什么出现全是问号