Estou usando o caractere Emoji no meu projeto. Esses caracteres são salvos (??) no banco de dados mysql. Eu tinha usado o agrupamento padrão do banco de dados em utf8mb4_general_ci
. Isso mostra
1366 Valor incorreto da string: '\ xF0 \ x9F \ x98 \ x83 \ xF0 \ x9F ...' para a coluna 'comment' na linha 1
ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
insert into tablename (column1,column2,column3,column4,column5,column6,column7) values ('273','3','Hdhdhdh😜😀😊😃hzhzhzzhjzj 我爱你 ❌',49,1,'2016-09-13 08:02:29','2016-09-13 08:02:29'
Defina utf8mb4 na conexão com o banco de dados:$database_connection = new mysqli($server, $user,$password,$database_name); $database_connection->set_charset("utf8mb4");
Respostas:
etapa 1, altere o conjunto de caracteres padrão do seu banco de dados:
etapa 2, defina charset ao criar a tabela:
ou alterar tabela
fonte
1) Banco de dados: altere o agrupamento padrão do banco de dados como
utf8mb4
.2) Tabela: Altere o agrupamento da tabela como
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
.Inquerir:
3) Código:
4) Defina
utf8mb4
na conexão com o banco de dados:fonte
SET NAMES utf8mb4;
para começar a salvar emoticons; antes desse comando, ele estava salvando-os como??
Os bancos de dados e as tabelas devem ter conjunto de caracteres
utf8mb4
e agrupamentoutf8mb4_unicode_ci
.Ao criar um novo banco de dados, você deve usar:
Se você possui um banco de dados existente e deseja adicionar suporte:
Você também precisa definir o conjunto de caracteres e agrupamento corretos para suas tabelas:
ou altere-o se você tiver tabelas existentes com muitos dados:
Observe que
utf8_general_ci
não é mais a melhor prática recomendada. Veja as perguntas e respostas relacionadas:Qual é a diferença entre utf8_general_ci e utf8_unicode_ci no Stack Overflow.
fonte
ALTER TABLE mytable MODIFY my_emoji_friendly_text_column VARCHAR(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_bin
vsutf8mb4_unicode_ci
para as colunas?Se você estiver usando Solr + Mysql + Java, poderá usar:
Isso pode ser usado:
No caso acima, esta é uma das soluções para armazenar seus emoticons no seu sistema.
Passos para usá-lo:
Biblioteca utilizada: import java.net.URLDecoder; importar java.net.URLEncoder;
Exemplo de código:
fonte
%
, sua decodificação será interrompida.Atualizei meu banco de dados e tabela para atualizar de utf8 para utf8mb4 . Mas nada funciona para mim. Então tentei atualizar o tipo de dados da coluna para blob , felizmente funcionou para mim e os dados foram salvos. Até meu banco de dados e tabela são CHARACTER SET utf8 COLLATE utf8_unicode
fonte
O comando para modificar a coluna é:
E precisamos usar type =
BLOB
O exemplo a ser modificado é o seguinte: -
Eu verifiquei se o mySQL e outros bancos de dados mais recentes não precisam
''
ser usados no comando table_name, column_name etc.Buscar e salvar dados: salve diretamente o conteúdo do bate-papo na coluna e para recuperar dados, busque dados como matriz de bytes
(byte[])
da coluna db e depois converta-os em,string
por exemplo, (código Java)fonte
text
/varchar
para ablob
e pronto. Loucura charset converter e agrupamento em todo o DB apenas para que :)Minha resposta só contribui para a resposta Selvamani P.
Você também pode precisar alterar as
SET NAMES utf8
consultasSET NAMES utf8mb4
. Isso fez o truque para mim.Além disso, este é um ótimo artigo para portar seu site de utf8 para utf8mb4. Em particular, o artigo faz 2 bons pontos nos índices e nas tabelas de reparo após convertê-los em utf8mb4:
ÍNDICES
MESAS DE REPARAÇÃO
Leia mais sobre as consultas para reparar tabelas no artigo.
fonte
REPAIR TABLE
eOPTIMIZE TABLE
deve ser desnecessário - eALTER
tem o efeito de fazê-las.O ponto principal não foi mencionado nas respostas acima que,
Precisamos passar a string de consulta com as opções
"useUnicode=yes"
e"characterEncoding=UTF-8"
na string de conexãoAlgo assim
fonte
Bem, você não precisa alterar o conjunto completo de banco de dados. Em vez disso, você pode fazer isso alterando a coluna para o tipo de blob .
Mensagens ALTER TABLE MODIFICAR BLOB de conteúdo;
fonte
Eu tenho uma boa solução para economizar seu tempo. Também encontro o mesmo problema, mas não consegui resolver esse problema pela primeira resposta.
Seu personagem com defeito é utf-8. Mas o emoji precisa de utf8mb4 para suportá-lo. Se você tiver permissão para revisar o arquivo de configuração do mysql, poderá seguir esta etapa.
Portanto, siga estas etapas para atualizar seu conjunto de caracteres (de utf-8 para utf8mb4).
passo 1. abra seu my.cnf para o mysql, adicione estas linhas ao seu my.cnf.
passo 2. interrompa seu serviço mysql e inicie o serviço mysql
Acabado! Então você pode verificar se seu personagem foi alterado para utf8mb4.
fonte
Suporte a emoji para aplicativos com pilha tecnológica - mysql, java, springboot, hibernate
Aplique as alterações abaixo no mysql para suporte ao unicode.
ALTER DATABASE <database-name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE <table-name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Conexão com o banco de dados - alteração de URL do jdbc:
jdbc:mysql://localhost:3306/<database-name>?useUnicode=yes&characterEncoding=UTF-8
Nota - Se a etapa acima não estiver funcionando, atualize a versão do mysql-connector para 8.0.15. (o mysql 5.7 funciona com o conector versão 8.0.15 para suporte a unicode)
fonte
A solução mais simples que funciona para mim é armazenar os dados como json_encode .
mais tarde, quando você recuperar, certifique-se de json_decode .
Aqui você não precisa alterar o agrupamento ou o conjunto de caracteres do banco de dados e da tabela.
fonte
Para quem tenta resolver isso em uma instância gerenciada do MySQL (no meu caso no AWS RDS), a maneira mais fácil era modificar o grupo de parâmetros e definir o conjunto de caracteres e o agrupamento do servidor como
utf8mb4
eutf8mb4_bin
, respectivamente. Após reiniciar o servidor, uma consulta rápida verifica as configurações dos bancos de dados do sistema e dos recém-criados:fonte