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

原文地址:https://blog.51cto.com/mbb97/2466482

时间: 2024-10-21 08:34:00

Flask项目中向Mysql存入Emoji表情引起的Bug的相关文章

mysql数据库怎么存入emoji表情,更改utf8mb4后为什么出现全是问号

在项目中遇到有人存emoji表情,出现如下错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 解决方法: 第一步: 修改mysql配置文件my.cnf(windows为my.ini,linux为my.cnf) my.cnf一般在etc/mysql/my.cnf位置.找到后请在以下三部分里添加如下内容: [client] default-character-

mysql支持emoji表情存取的解决方案

让mysql支持emoji表情存取的解决方案 APP移动端无需做任何修改,服务端修改即可. 第一步:修改jdbcUrl: conn.url=jdbc:mysql://127.0.0.1:3306/eyes?zeroDateTimeBehavior=convertToNull&autoReconnect=true 第二步:mysql驱动包: mysql-connector-java-5.1.24.jar 第三步:数据库版本检查: select version() #查看mysql版本 5.6.23

mysql支持emoji表情

让MySql支持Emoji表情 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需要 >= MySQL 5.5.3版本.(经检测5.5.29的也可以)低版本不支持这个字符集.复制报错 停止MySQL Server服务 修改 my.cnf或者mysql.ini [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-ha

mysql 支持emoji表情

在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column 'content' at row 原因是当前mysql的字符集为utf-8,最多3个字节,emoji表情需要4个字节来表示.所以导致insert报错. 一般的方法是将字符集改为utf8mb4 2. utf8mb4这样的字符集需要mysql 5.5才支持,当时我的版本微5.1,所以自己去官网下了5.6的

让MySQL支持Emoji表情 mysql 5.6

让MySQL支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决方案:将Mysql的编码从utf8转换成utf8mb4. 需要 >= MySQL 5.5.3版本.从库也必须是5.5的了.低版本不支持这个字符集.复制报错 2 my.cnf 文件添加 [mysqld]  character-set-server = utf8mb4  collation-server = utf8mb4_unicode_ci  init_c

Mysql 解决emoji表情处理问题 - Incorrect string value: '\xF0\x9F\x92\x94' for column

Incorrect string value: '\xF0\x9F\x92\x94' for column 方式一: 改为UTF8存贮 https://blog.csdn.net/cai454692590/article/details/100016561 方式二 数据库改为utf8mb4 Mysql 解决emoji表情处理问题 - Incorrect string value: '\xF0\x9F\x92\x94' for column 原文地址:https://www.cnblogs.com

让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)

手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' for column 'review' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.jav

php解决微信开发中用户昵称中的特殊字符与emoji表情写入mysql错误的问题

解决办法:将3个字节的特殊字符与emoji表情替换掉即可. $nickname = preg_replace('/xE0[x80-x9F][x80-xBF]'.'|xED[xA0-xBF][x80-xBF]/S','?', $nickname ); $nickname = preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $nickname);

MySQL插入emoji表情失败问题的解决方法

前言 之前一直认为UTF-8是万能的字符集问题解决方案,直到最近遇到这个问题.最近在做新浪微博的爬虫, 在存库的时候发现只要保持emoji表情,就回抛出以下异常: Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...' 众所周知UTF-8是3个字节, 其中已经包括我们日常能见过的绝大多数字体. 但3个字节远远不够容纳所有的文字, 所以便有了utf8mb4, utf8mb4是utf8的超集, 占4个字节, 向下兼容utf8. 我们日常用的emoj