phpMyAdmin
 sql >> Base de Dados >  >> Database Tools >> phpMyAdmin

MySQL gera codificação ocidental no arquivo PHP UTF-8


Use mysqli_set_charset para alterar a codificação do cliente para UTF-8 logo após a conexão:
$mysqli->set_charset("utf8");

A codificação do cliente é o que o MySql espera que sua entrada esteja (por exemplo, quando você insere texto fornecido pelo usuário em uma consulta de pesquisa) e o que ela fornece os resultados (portanto, ela deve corresponder à sua codificação de saída para echo para exibir as coisas corretamente).

Você precisa que ele corresponda à codificação de sua página da web para considerar os dois cenários acima e a codificação do arquivo de origem PHP (para que as partes codificadas de suas consultas sejam interpretadas corretamente).

Atualização:como converter dados inseridos usando latin-1 para utf-8

Em relação aos dados que já foram inseridos usando a codificação de conexão errada, existe uma solução conveniente para corrigir o problema. Para cada coluna que contém esse tipo de dados, você precisa fazer:
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

Os espaços reservados table_name , column_name e existing_column_type deve ser substituído pelos valores corretos do seu banco de dados a cada vez.

O que isso faz é
  1. Diga ao MySql que ele precisa armazenar dados nessa coluna em latin1. Esse conjunto de caracteres contém apenas um pequeno subconjunto de utf8, portanto, em geral, essa conversão envolve perda de dados, mas neste cenário específico os dados já foram interpretados como latin1 na entrada, portanto, não haverá efeitos colaterais. No entanto, o MySql converterá internamente a representação de bytes de seus dados para corresponder ao que foi originalmente enviado do PHP.
  2. Converter a coluna em um tipo binário (BLOB ) que não possui informações de codificação associadas. Neste ponto, a coluna conterá bytes brutos que são uma string de caracteres utf8 adequada.
  3. Converta a coluna para seu tipo de caractere anterior, informando ao MySql que os bytes brutos devem ser considerados na codificação utf8.

AVISO:você só pode usar essa abordagem indiscriminada se a coluna em questão contiver somente dados inseridos incorretamente. Quaisquer dados que tenham sido inseridos corretamente serão truncados na primeira ocorrência de qualquer caractere não ASCII!

Portanto, é uma boa ideia fazer isso agora, antes que a correção do lado do PHP entre em vigor.