我可以使用终端使用mysql成功地将表情符号(即utf8mb4数据)添加到表中。
当我的Python Flask网站尝试将表情符号发送到同一个数据库表和字段时,数据库会返回以下错误的字符串错误:
(1366,“错误的字符串值:'\ xF0 \ x9F \ x98 \ x8E'用于第1行的'p_description'列”
更新
的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
**问:如何强制我的网站以utf8mb4格式向我的数据库发送数据?
答案 0 :(得分:5)
Python Flask默认在MySQL的utf-8中与MySQL通信,即它无法处理完整的utf8mb4范围(包括emojis)。 Flask将覆盖数据库字符集设置,包括my.cf中的字符集服务器设置。将以下设置添加到Flask应用程序通过强制它在utf8mb4中与MySQL通信来解决问题:
app.config ['MYSQL_DATABASE_CHARSET'] ='utf8mb4'
答案 1 :(得分:1)
我最近遇到了几乎相同的问题,其中重音字符导致PHP json_encode()
抱怨“格式错误的UTF8字符”。
文档中的许多内容最终导致我在页面底部10.5 Character Set Configuration的一个段落指出:
...当
character_set_system
与character_set_server
或character_set_client
不同时character_set_system
,您手动输入字符(作为数据库 可以显示这些对象标识符,列值或两者 来自客户端或输出本身的输出可能不正确 格式不正确。
事实上,utf8
默认为 character_set_server
,而latin1
默认为 character_set_server = utf8
- 我不敢推测这是为什么。
我的解决方案是在我的latin1
部分明确设置collation_server = utf8_general_ci
(默认为latin1_swedish_ci
)和[mysqld]
(默认为my.cnf
) *_system
配置文件然后重启服务。这些设置与相应的character_set_system
设置不同的事实显然是我的问题的原因。
某些实验已确认utf8
必须 character_set_database
,否则服务器将无法启动。文档说明character_set_server
可以与data(citytemp)
hc <- highchart() %>%
hc_xAxis(categories = citytemp$month) %>%
hc_add_series(name = "Tokyo", data = citytemp$tokyo) %>%
hc_add_series(name = "London", data = citytemp$london) %>%
hc_add_series(name = "Other city",
data = (citytemp$tokyo + citytemp$london)/2) %>%
hc_chart(type = "column",
options3d = list(enabled = TRUE, beta = 15, alpha = 15))
hc
设置不同,但我目前没有能力测试其效果。
答案 2 :(得分:0)
如果要将unicode字符存储到数据库中,则需要将列字符集定义为utf8mb4
。
如果需要,还可以更改表的字符集。
它将帮助您以unicode formate存储数据
由于