Olá pessoal, primeiramente peço desculpas por pegar no pé com essa questão tão discutida por aí, mas não estaria postando caso realmente não estivesse conseguindo resolver este problema.
Não faço ideia se este problema é comum ou não, mas já tentei todas as possíveis soluções que encontrei em outros tópicos que diziam este erro ser bem comum e não tive muito progresso.
Bom, o negócio é o seguinte: tou desenvolvendo uma aplicação Java Web usando o banco de dados MySQL, fiz diversos testes para entender o que está acontecendo:
Deixei a instância do MySQL e meu banco de dados totalmente latin1, chequei as variaveis do MySQL:
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
collation_connection latin1_swedish_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
Dessa forma, eu consigo inserir registros com caractere especial sem problemas pelo MySQL Command Line, ficam perfeitamente definidos os acentos, porém, pelo software caso eu insira um registro como “Ç” no MySQL fica registrado como um caractere estranho, mas consigo retornar o mesmo registro para o software, e ele retornar “Ç” e o registro que foi registrado perfeitamente diretamente pelo Command Line retorna um caractere estranho. Conclusão: algo está convertendo os caracteres especiais no caminho software-banco.
Não parece o ideal para mim, mas tudo bem, me conformei com a ideia do banco de dados ficar errado, desde que o retorno visual do registro esteja correto.
Porém aí chega o problema: na hora de fazer backup do banco de dados, usando o mysqldump, acontece algo estranho: ele gera o arquivo de backup “traduzindo” os caracteres estranhos que retornam corretamente visualmente. Ou seja, o que antes era um caractere estranho no banco de dados, mas que no software aparecia como “Ç” agora está como “Ç” no banco, e no software ele aparece um caractere estranho.
Bom, daí eu tentei forcar o character set para latin1 no backup:
mysqldump -u root --databases --default-character-set=latin1 projeto > C:\BackupProjeto.sql
Porém da na mesma.
Tentei reconfigurar a instancia do mysql (deletar e criar uma nova) tudo como utf-8, e deu na mesma.
Então, uma possível solução seria fazer o MySQL gerar o backup EXATAMENTE como consta em seus registros, sem converter nada, ou identificar o que está convertendo esses caracteres entre o caminho software-banco e tentar solucionar.
Não, estou usando apenas o console do java para esses testes, assim fatores como page encoding ficam fora de questão.
Acredito que isso vai ajudar muita gente, porque já perguntei para várias pessoas e elas tinham a mesma dúvida que eu.
Obrigado desde já!