Sam*_*yon 3 python mysql forms sql-server stored-procedures
我可以使用终端使用mysql成功地将表情符号(即utf8mb4数据)添加到表中.
当我的Python Flask网站尝试将表情符号发送到同一个数据库表和字段时,数据库返回以下错误的字符串错误:
(1366,"错误的字符串值:'\ xF0\x9F\x98\x8E'用于第1行的'p_description'列")
UPDATE
mysql> SHOW VARIABLES WHERE Variable_name LIKE'character_set_%'或Variable_name LIKE'collation%';
=>
| 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 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_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格式向我的数据库发送数据?
Python Flask默认在MySQL的utf-8中与MySQL通信,即它无法处理完整的utf8mb4范围(包括emojis).Flask将覆盖数据库字符集设置,包括my.cf中的字符集服务器设置.将以下设置添加到Flask应用程序通过强制它在utf8mb4中与MySQL通信来解决问题:
app.config ['MYSQL_DATABASE_CHARSET'] ='utf8mb4'