Padrões estão aí para confundir ou para organizar?
Ontem fiquei mais de uma hora brigando com o collation de um banco de dados e o charset de uma página!
No MySQL, os collations recomendados para o português são latin1 (ISO 8859-1 West European) e utf8 (UTF-8 Unicode). Em um banco estava latin1 e no outro estava utf8… então a página ficou zuada. Então converti o segundo banco para utf8, mas aí o cabeçalho da página ficava zuado e eu não consegui importar os dados como latin1, só como utf8!
O pior é que a página não tinha a meta informação de charset! Nem o Firefox e nem o Internet Explorer reconheciam automaticamente , pois o menu estava em windows-1252 e o corpo estava em utf-8… ou um ou outro ficava zuado…
Eu já estava de saco cheio no fim das contas e nem cheguei a essa conclusão, mas se eu colocasse o colation do banco em latin1 e importasse os dados como ISO-8859-1, eu conseguiria exibir na página corretamente como windows-1252!
Agora vi no W3C que eles recomendam a utilização de UTF-8, então é isso que vou fazer: banco de dados em utf8 e páginas em UTF-8!
baum… acho q vc interpretou de forma equivocada. O W3C apenas diz “We recommend the use of UTF-8 wherever possible.” ele não diz que só se deve usar UTF-8, aliás estudando o UTF-8 vemos que só se recomenda usar isto em páginas de língua inglesa (ou de caracteres similares). Tanto isso é verdade que na mesma página citada tem uma tabela para códigos em outras línguas.
As modificações no UTF-8 (tal como a “iso-8859-1” e “windows-1252”) são recomendáveis para nossa língua até o dia em que o UNICODE seja utilizado por todo mundo (se é que esse dia irá existir).
Quanto ao charset do MYSQL, isso mais parece a Torre de Babel, cada um usa um Collation diferente. Não existe consenso ainda, coisa que é bastante estranha em se tratando de algo tão básico.
Até mais
Formatei meu micro, instalei Apache 2.0, PHP 5.1 e MySQL 5.0 e volto a ter erro de charset…
Todos os arquivos no servidor estão em UTF-8, o charset default do banco está em utf8 e o colation está em utf8_general_ci, o charset no HTML está como UTF-8, no cabeçalho do HTTP vem UTF-8 e o Firefox exibe a página em UTF-8, mas todos os dados vindos do MySQL ficam zuados…
Felizmente uma página do manual do MySQL falando sobre charset permitiu que eu descobrisse que a causa do erro é que o charset da conexão estava em latin1 enquanto que todo o resto estava em utf8…
Tive de colocar no script de persistência da camada de dados o comando abaixo:
SET CHARACTER SET utf8
Tosco isso né?