Erro Charset/Enconding para MySql+Jpa/Hibernate+Facelets+Tomcat

1 resposta
Flasoft

Pessoal estou fazendo um select simples com jpa/hibernate em uma tabela:

public List<GeneroBean> getGeneros() { return em.createNamedQuery("GeneroBean.findAll").getResultList(); }

Deveria retornar uma lista de beans to tipo Genero cujo a propriedade Descricao fosse respectivamente: Ação, Animação, Comédia
mas retorna: A?Æo, Anima?Æo e Com?dia

Então achei um exemplo (http://www.profissionaisdeweb.com/desenvolvimento/resolva-os-problemas-de-acentos-no-mysql-em-campos-blob-e-outros/) e adaptei:

SET NAMES latin1; ALTER TABLE genero MODIFY COLUMN descricao VARCHAR(15) CHARACTER SET utf8; SET NAMES utf8;
para conv a coluna para utf:

Então passou a retornar: A��o, Anima��o, Comdia…

Minha url estou utilizando a url de conexão:
jdbc:mysql://localhost:3306/MeuDB?characterEncoding=UTF-8
mas já tentei e tive o mesmo resultado para:
jdbc:mysql://localhost:3306/MeuDB
jdbc:mysql://localhost:3306/MeuDB?useUnicode=true&characterEncoding=UTF8
jdbc:mysql://localhost:3306/MeuDB?characterEncoding=UTF8&characterSetResults=UTF8
jdbc:mysql://localhost:3306/MeuDB?useUnicode=true&characterEncoding=UTF8&characterSetResults=UTF8

Em todos os meus XHTMLs eu coloco na primeira linha:

<?xml version="1.0" encoding="UTF-8"?>

e no body da pagina(template) eu coloco também:

Alguém tem alguma idéia do que está ocorrendo?

1 Resposta

Flasoft

Após um dia tentando e tentando constatei que o culpado é o Windows!

Utilizo Windows Vista Home.
Estava executando o insert pelo programa MySQL Command Line Client(console desenvolvido para o MySQL), este console no windows abre em uma DOS, as janelas do DOS, utilizam ISO-XXXX-X(provavelmente 8859-1, padrão microsoft), então quando eu digitava o insert na janela do DOS ela enviava para console um insert á estragado, de charset diferente do banco!

quando eu fazia o select a console retornava o binario para a janela do DOS, que intepretava da maneiro correta para ela, mas no banco já estava guardado de forma errada, a janela do dos que me entregava o bin correto.

Ex:
Eu digito no na janela do DOS utilizando o charset default do DOS:
INSERT INTO genero (id_genero, descricao, id_imagem_poster_padrao) VALUES (2, ‘Ação’, null);

Ela envia para a console do banco que esta trabalhando com UTF e interpreta:
INSERT INTO genero (id_genero, descricao, id_imagem_poster_padrao) VALUES (2, ‘Ao’, null);

dai o banco salva na coluna descricao o binario equivalente a isto daqui: Ao

Quando faço um select pelo DOS ele faz o processo inverso:
Pega este binario converte para Ao devolve para a janela do DOS que converte para ISO_XXXX_X que sai extamente o q ele qria…

Solucao este tipo de parametrizaçao, onde nao pretendo fazer uma tela de adm, vou fazer pelo MySql Query Browser, fornecido pela própria equipe MySql, ele leva em consideração o charset do banco, para executar os comando, extamente como minha aplicação, então funciona!

Criado 17 de dezembro de 2009
Ultima resposta 18 de dez. de 2009
Respostas 1
Participantes 1