Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como exibir caracteres UTF-8 no phpMyAdmin?


Infelizmente, o phpMyAdmin é um dos primeiros aplicativos php que falam com o MySQL sobre charset corretamente. Seu problema é provavelmente devido ao fato de que o banco de dados não armazena as strings UTF-8 corretas em primeiro lugar.

Para exibir corretamente os caracteres corretamente no phpMyAdmin, os dados devem ser armazenados corretamente no banco de dados. No entanto, converter o banco de dados no conjunto de caracteres correto geralmente interrompe aplicativos da Web que não reconhecem o recurso relacionado ao conjunto de caracteres fornecido pelo MySQL.

Posso perguntar:o MySQL é> versão 4.1? Para qual aplicativo da web é o banco de dados? phpBB? O banco de dados foi migrado de uma versão mais antiga do aplicativo Web ou de uma versão mais antiga do MySQL?

Minha sugestão não é irmão se o aplicativo da web que você está usando for muito antigo e não for suportado. Apenas converta o banco de dados para UTF-8 real se tiver certeza de que o aplicativo da Web pode lê-los corretamente.

Editar:

Seu MySQL é> 4.1, o que significa que é compatível com charset. Quais são as configurações de agrupamento do conjunto de caracteres para seu banco de dados? Tenho certeza de que você está usando latin1 , que é o nome do MySQL para ASCII, para armazenar o texto UTF-8 em 'bytes' no banco de dados.

Para clientes insensíveis ao conjunto de caracteres (ou seja, mysql-cli e php-mod-mysql), os caracteres são exibidos corretamente, pois estão sendo transferidos para/do banco de dados como bytes. No phpMyAdmin, os bytes são lidos e exibidos como caracteres ASCII, esse é o texto de lixo que você parece.

Incontáveis ​​horas foram gastas anos atrás (2005?) quando o MySQL 4.0 ficou obsoleto, em muitas partes da Ásia. Existe uma maneira padrão de lidar com seu problema e dados engolidos:
  1. Faça backup de seu banco de dados como .sql
  2. Abra-o no editor de texto compatível com UTF-8, verifique se estão corretos.
  3. Procure por charset collation latin1_general_ci , substitua latin1 para utf8 .
  4. Salve como um novo arquivo sql, não sobrescreva seu backup
  5. Importe o novo arquivo, ele agora aparecerá corretamente no phpMyAdmin, e o japonês em seu aplicativo da web se tornará pontos de interrogação. Isso é normal.
  6. Para seu aplicativo web php que depende de php-mod-mysql, insira mysql_query("SET NAMES UTF8"); depois de mysql_connect() , agora os pontos de interrogação desaparecerão.

  7. Adicione a seguinte configuração my.ini para mysql-cli:
    # CLIENT SECTION
    [mysql]
    default-character-set=utf8
    # SERVER SECTION
    [mysqld]
    default-character-set=utf8
    

Para obter mais informações sobre o conjunto de caracteres no MySQL, consulte o manual: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

Observe que suponho que seu aplicativo da web esteja usando php-mod-mysql para se conectar ao banco de dados (daí o mysql_connect() function), já que php-mod-mysql é a única extensão que consigo pensar que ainda aciona o problema ATÉ HOJE.

phpMyAdmin usa php-mod-mysqli para se conectar ao MySQL. Eu nunca aprendi a usá-lo porque mudei para frameworks* para desenvolver meus projetos php. Eu recomendo fortemente que você faça isso também.
  • Muitas estruturas, por exemplo, CodeIgniter, Zend, use mysqli ou pdo para se conectar a bancos de dados. As funções mod-mysql são consideradas obsoletas por causa de problemas de desempenho e escalabilidade. Além disso, você não deseja vincular seu projeto a um tipo específico de banco de dados.