当前位置: 首页 > 知识库问答 >
问题:

通过表单将emoji添加到数据库时出现不正确的字符串错误

通京
2023-03-14

我可以使用终端使用mysql成功地将emoji(即utf8mb4数据)添加到表中。

(1366,“不正确的字符串值:'\xf0\x9f\x98\x8e'用于第1行的列'p_description'”)

更新

  • 我阅读了建议的线程,但没有看到如何阻止服务器重写本地字符集服务器设置。
  • 增加了集合名UTF8MB4;前插入到,但没有效果
  • 我按评论中的建议检查了(谢谢!)而且是的,我所有的数据库字符设置都在可能的地方显示utf8mb4。这是我从MySQL中得到的:

=>

Variable_name值

character_set_client utf8mb4

character_set_server utf8mb4

character_set_system utf8

collation_connection utf8mb4_unicode_ci

我使用html表单、jQuery、AJAX和Python Flask将数据发送到数据库。Python调用下面的SQL存储过程。

存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_addWish`(
    IN p_title varchar(45),
    IN p_description varchar(1000),
    IN p_user_id bigint
)
BEGIN
    SET NAMES utf8mb4; insert into tbl_wish(
        wish_title,
        wish_description,
        wish_user_id,
        wish_date
    )
    values
    (
        p_title,
        p_description,
        p_user_id,
        NOW()
    );
END

**问:如何强制网站以utf8mb4格式向数据库发送数据?

共有1个答案

贲功
2023-03-14

Python Flask默认在MySQL的utf-8中与MySQL通信,也就是说,它不能处理完整的utf8mb4范围(包括emojis)。Flask将覆盖数据库字符集设置,包括my.cf中的字符集服务器设置。向Flask应用程序添加以下设置可以通过强制其与UTF8MB4中的MySQL通信来修复该问题:

app.config['mysql_database_charset']='utf8mb4'

 类似资料:
  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 问题内容: 我将$ data作为JSON编码的数据,并且有以下字符串: 需要将其添加到$ data中,以便我可以将其作为json字符串从中读取。 我怎样才能做到这一点? 问题答案: 您需要先添加新的键/值,然后添加它。

  • 问题内容: 当我使用定义变量时,该字符串不会添加到字符串池中,对吗? 现在,当我定义另一个而不是时,我将其定义为突然。(或我的大学老师说)。这是为什么?是什么使这个字符串突然变成字符串池字符串? 问题答案: 当我用new定义一个StringBuffer变量时,该字符串没有添加到字符串池中,对吗? 创建a 根本不会创建a 。 现在,当我定义另一个StringBuffer而不是new时,我突然将其定义

  • 我正在Java创建一个航班应用程序,它应该做的事情之一是添加一个新的航班到数据库。我可以添加航班名称没有问题,但我有问题添加航班的座位数到数据库。数据库表被设置为将座席数作为整数值。在我的代码中,将这个值从用户界面添加到数据库的函数将一个值作为整数参数。然后,在添加新航班的实际按钮的事件处理程序代码中,我将值从字符串(这是文本框中接受的字符串)转换为整数,以便将值输入数据库。然而,当我运行我的代码

  • 问题内容: 我在Java程序中有两个字符串,我想以某种方式混合以形成两个新字符串。为此,我必须从每个字符串中提取一些构成字符并将其添加以形成新的字符串。我有这样的代码(this.eka和this.toka是原始字符串): 我正在获取.charAt(x)部分的数字,那么如何将字符转换为字符串? 问题答案: 只使用永远使用代替 例如,当位置arent不是固定值而变量 其中x,y,z是保存从中提取位置的

  • 我的连接是这样设置的: 当tyring向表中添加一行时,我会遇到以下错误: 我正在插入数以千计的记录,当文本包含\xf0(即不正确的字符串值总是以\xf0开头)时,我总是得到这个错误。 列的排序规则是UTF8_GENERAL_CI。