flask mysql保存图片_Flask项目中向Mysql存入Emoji表情引起的Bug

Flask项目中向Mysql存入Emoji表情引起的Bug

发布时间:2020-08-02 07:29:20

来源:51CTO

阅读:213

作者:林树楷

Bug背景

之前在写Flask入门项目Flask Mega项目的时候,一直都是用SQLite,后面切换到Mysql数据库发现在存入一些EMOJI表情符号的时候,会出现如下的报错。

34adb8f104681b10e0ee95962877a18c.png

Bug解决思路

刚开始觉得应该是数据库的编码的问题,因为之前也遇到数据库存入特殊符号的时候发生报错。那先查看服务器上面的数据库编码格式。

show variables like '%char%';

通过查看数据库编码发现都是utf8格式。然后查阅有关的资料,以及翻阅之前做过的笔记发现,Mysql中的utf8编码格式最多支持最多3字节的数据,而emoji表情字符是4个字节的字符,如果采用utf8的数据库插入表情字符,就会因为被截断导致无法存入到数据库。

Bug解决过程

大概理解了原理就好办了,修改数据库的编码格式,因为我是使用的是Mariadb数据库

76460e1c5b571ee7ca87006206771fed.png

我修改的是/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数据库,进入数据库中查看是否修改成功:

d9ee4baa6ffeaeb5d1685f5311b3a5d2.png

修改成功,然后接着修改数据库和表的编码格式:

alter database database_name character set 'utf8mb4' collate 'utf8mb4_general_ci';

表格编码格式:

alter table table_name convert to character set 'utf8mb4' collate 'utf8mb4_general_ci';

查看是否修改成功:

9ea7fb9e81a2e18e166c06175e975a3b.png

修改成功!!!

重启项目然后再次写入带有Emoji表情符号的评论到数据库中,发现还是出现了问题,重新梳理了一下思路大概是因为Flask项目中的SQLAlchemy连接Mysql的编码格式错误,重新修改了一下连接数据库的编码格式:

8e94351e8bd027e19f9b7d7b225efc33.png

再次重启项目重新发布评论:

25ba796bf59387599fce11297b7dadf2.png

大功告成,问题解决。

参考链接

https://blog.csdn.net/woslx/article/details/49685111

https://blog.csdn.net/poice00/article/details/52129351

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值