通过表单将表情符号添加到数据库时,错误的字符串错误

Sam*_*yon 3 python mysql forms sql-server stored-procedures

我可以使用终端使用mysql成功地将表情符号(即utf8mb4数据)添加到表中.

当我的Python Flask网站尝试将表情符号发送到同一个数据库表和字段时,数据库返回以下错误的字符串错误:

(1366,"错误的字符串值:'\ xF0\x9F\x98\x8E'用于第1行的'p_description'列")

UPDATE

  • 我读了建议的线程,并没有看到如何阻止服务器覆盖我的本地字符集服务器设置.
  • 添加了SET NAMES utf8mb4; INSERT INTO之前,但没有效果
  • 我按照评论中的建议进行了检查(谢谢!),是的,我的所有数据库字符设置都显示了utf8mb4.这是我从mysql获得的:

mysql> SHOW VARIABLES WHERE Variable_name LIKE'character_set_%'或Variable_name LIKE'collat​​ion%';

=>

| Variable_name | 价值|

| character_set_client | utf8mb4 |

| character_set_connection | utf8mb4 |

| character_set_database | utf8mb4 |

| character_set_filesystem | 二进制|

| character_set_results | utf8mb4 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| collat​​ion_connection | utf8mb4_unicode_ci |

| collat​​ion_database | utf8mb4_unicode_ci |

| collat​​ion_server | utf8mb4_unicode_ci |

10行(0.00秒)

我使用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
Run Code Online (Sandbox Code Playgroud)

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

Sam*_*yon 5

Python Flask默认在MySQL的utf-8中与MySQL通信,即它无法处理完整的utf8mb4范围(包括emojis).Flask将覆盖数据库字符集设置,包括my.cf中的字符集服务器设置.将以下设置添加到Flask应用程序通过强制它在utf8mb4中与MySQL通信来解决问题:

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