Erro de cadeia incorreto ao adicionar emoji a um banco de dados por meio de um formulário
Posso adicionar com êxito emoji (ou seja, dados utf8mb4) às tabelas usando o mysql usando o terminal.
Quando o site do Python Flask tenta enviar emoji para a mesma tabela e campo do banco de dados, o banco de dados retorna o seguinte erro incorreto de string:
(1366, "Valor incorreto da sequência: '\ xF0 \ x9F \ x98 \ x8E' para a coluna 'p_description' na linha 1")
ATUALIZAR
Li os tópicos sugeridos e não estou vendo como impedir que o servidor substitua minha configuração local do conjunto de caracteres do servidor.Adicionado SET NAMES utf8mb4; antes de INSERT INTO, mas nenhum efeitoEu verifiquei como sugerido nos comentários (obrigado!) E sim, todas as minhas configurações de caracteres do banco de dados estão mostrando utf8mb4 onde é possível. Isto é o que eu recebo do mysql:mysql> MOSTRA VARIÁVEIS ONDE Nome da variável COMO 'character_set_%' OU Nome da variável COMO 'collation%';
=>
| Nome da variável | Valor
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binário |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| servidor de collation | utf8mb4_unicode_ci |
10 linhas em conjunto (0,00 s)
Estou usando um formulário html, jQuery, AJAX e Python Flask para enviar os dados para o banco de dados. Python chama o procedimento armazenado SQL abaixo.
Procedimento armazenado:
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
** P: Como forço meu site a enviar dados para meu banco de dados no formato utf8mb4?