Contexto: Eu envio consultas para meu servidor MariaDB (Ver 15.1 Distrib 10.3.34-MariaDB) através de um script Python e módulo mysql.connector. (Não sei qual está entre os 3 da minha lista: mysql-connector 2.2.9 mysql-connector-python 8.0.29 mysql-connector-python-rf 2.2.2 )
Eu tive um primeiro problema em que esta consulta, por exemplo:
INSERT INTO messages(message_id, message, user_id, date_sent, channel_sent, stream_sent) VALUES('1c5e6b29-cd11-4a8b-bd20-583f65b4a130', '?', 121797523, FROM_UNIXTIME(1658512097), 24147592, 1539530627)
Retornaria este erro:
1366 (22007): Incorrect string value: '\xF0\x9F\x99\x83' for column `table_name`.`messages`.`message` at row 1
Depois de inúmeras horas procurando, encontro um post dizendo esta função: conn.set_charset_collation(charset=charset, collation=collation)
deve corrigi-lo. Então, logo após conectar ao meu banco de dados no meu script Python e obter meu conn (o que você usa para obter o cursor), eu faço
conn.set_charset_collation(charset="utf8mb4", collation="utf8mb4_bin")
Agora recebo uma nova mensagem de erro:unknown encoding: utf8mb4
Eu também encontrei outro post dizendo para editar /etc/mysql/my.cnf
, então eu fiz e agora se parece com o seguinte (mas não corrigiu o problema):
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 500
character-set-client-handshake = 0
init_connect = 'SET character_set_system = utf8mb4'
init_connect = 'SET character_set_connection = utf8mb4'
init_connect = 'SET character_set_database = utf8mb4'
init_connect = 'SET character_set_results = utf8mb4'
init_connect = 'SET collation_database = utf8mb4_bin'
init_connect = 'SET collation_connection = utf8mb4_bin'
init_connect = 'SET NAMES utf8mb4'
character_set_client = utf8mb4
collation-server = utf8mb4_bin
(Eu fiz systemctl restart mysql
e systemctl restart mariadb
depois) Eu ficaria MUITO GRATO por qualquer coisa que ajudasse a consertar isso. Eu geralmente sei que posso encontrar uma solução depois de procurar por algumas horas, mas aqui eu sinto que nunca vou conseguir consertar
Eu encontrei uma solução. Eu tive que, logo após criar meu cursor, chamar essas funções:
Isso é estranho porque eu pensei que eles já foram feitos através do que eu adicionei
/etc/mysql/my.cnf
, mas aparentemente não? De qualquer forma. Eu estou felizEle diz que só posso adicionar isso como resposta aceita em 2 dias, vou adicioná-lo então.