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:
- Faça backup de seu banco de dados como
.sql
- Abra-o no editor de texto compatível com UTF-8, verifique se estão corretos.
- Procure por
charset collation latin1_general_ci
, substitualatin1
parautf8
. - Salve como um novo arquivo sql, não sobrescreva seu backup
- 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.
- Para seu aplicativo web php que depende de php-mod-mysql, insira
mysql_query("SET NAMES UTF8");
depois demysql_connect()
, agora os pontos de interrogação desaparecerão. -
Adicione a seguinte configuraçãomy.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.