Percebi q mesmo q o banco esteja com o encoding / charset correto para caracteres acentuados a ordenação não fica correta.
Ex.: Imaginem uma tabela com os registros: ‘a’, ‘à’ e ‘b’ se eu fizer:
select * from tabela order by campo
aparece na seguinte ordem: ‘a’, ‘b’ e ‘à’.
Percebi isto no SQL Server e no PostGreSQL.
Vi q no PostGreSQL existe a função translate onde posso fazer o seguinte comando abaixo para obter o resultado certo:
select * from tabela order by translate(campo, ‘âãá’, ‘aaa’)
A pergunta é: existe uma forma prática via Hibernate para obter o resultado na ordem alfabética correta? Ou, existe mais alguma coisa a ser feita no banco de dados (qq um) para ter o resultado certo?
Obrigado.
Até agora nunca consegui resolver esse problema através do BD nem do Hibernate, então faço o seguinte: leio os dados via Hibernate e em seguida os ordeno através de um Comparator. Esse Comparator, por sua vez, ordena String’s através de um Collator. Recomendo checar o link abaixo:
http://www.guj.com.br/posts/list/93306.java
Obrigado.
Recebi uma resposta tb sobre as variáveis LC_COLLATE e LC_CTYPE para o PostGreSQL no post: http://br.groups.yahoo.com/group/flex-brasil/message/23007, mas como respondi neste http://br.groups.yahoo.com/group/flex-brasil/message/23008 tinha q ter uma forma mais prática.
É um nonsense os bancos gravarem a acentuação corretamente mas não as ordenar de forma correta.
lembro uma vez, que o thingol, se não me engnao, me falou uma solução para compara desonciderando caracters acentuados, era uma solução com Locale algo assim, não lembro bem…
talvez ele possa ajudar…
Vlw, deve ser a url da resposta do roger_rf.