Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Henrique Barcelos

ORDER BY e acentuação

Recommended Posts

Boa madrugada, galera...

Vim recorrer aos oráculos do MySQL (não é um trocadilho devido à Sun ter sido comprada pela Oracle :P)...

 

Acontece o seguinte: eu tenho uma lista com todas as cidades do Brasil armazenadas no banco de dados, numa tabela com codificação LATIN 1.

 

Acontece que o final da lista é esse:

  • Xinguara
  • Xique-Xique
  • Zabelê
  • Zacarias
  • Zortéa
  • Zé Doca
  • Água Azul do Norte
  • Água Boa Água Boa
  • Água Branca
  • Água Branca
  • Água Branca
  • Água Clara
  • Água Comprida
Percebam que o Á vem depois do Z.

 

Alguém tem ideia de como resolver?

 

Obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não pode resolver isso via aplicação?

Os SGBDs foram feitos pensando em idiomas que não possuem acentuação, por isso não sei se já existe uma forma de consertar este problema usando "ORDER BY".

Se você realmente quer resolver isso no banco, você pode criar um procedimento que realize a ordenação tratando os acentos. Se você quiser ajuda no procedimento, só falar. (:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sou um Heavy User de MySQL, então desculpem a ignorância.

Nem sabia que era possível criar funções MySQL, muito menos como adicioná-las ao meu banco de dados.

 

Minha intuição me diz que isso deve ser executado como um comando SQL comum, estou certo?

Por exemplo, no PHPMyAdmin, eu devo escrever o código na aba 'SQL' e executar?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que basta o order by

remove_acentos(cidade)

não sei se existe melhor forma , é esta que eu uso no Oracle pois preserva o valor original do campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como está configurado o DDL dessa base e da tabela?

 

o mysql, tal como qq outro SGDB popular faz a ordenação corretamente independente de acentuação,

no entanto, depende como estão armazenados os dados, codificação, collation, se está convertendo os dados em htmlentities antes de salvar no banco, etc..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala pessoal, tudo certo? Estou com um problema parecido com o do amigo.

 

Tenho uma tabela (MySQL) com Collation e charset latin1, minha exibição de dados está ok, mas o meu select está com problemas no order by.

 

Como os dados gravados tem acentos ou mostra fora de ordem total, ou alguns registros pulam.

 

Por exemplo:

 

Se usar um simples ORDER BY nome ASC vou ter o seguinte resultado:

Airton

Ângelo

Érica

Bianca

Flávio

Francisco

Giovani

 

Se eu usa ORDER BY CONVERT(nome USING utf8) ASC vou ter o seguinte resultado:

Airton

Ângelo

Érica

Bianca

Flávio

Francisco

Giovani

 

Já se eu uso o ORDER BY CHAR(nome) ASC vou ter o resultado mais aproximado:

Airton

Ângelo

Bianca

Érica

Flávio

Giovani

Francisco

 

Reparem nos dois últimos valores, não sei por que, mas a ordem fica incorreta. Alguém sabe pq isso acontece?

Essa função do "remove_acento" como eu faço para usar ela? Sou meio noob em MySQL.

 

Por fim, como se trata de um servidor shared, não consigo mudar o encode do banco, então teria que resolver na própria query SQL. Creio que a função citada resolveria meu problema, mas não sei usar ela.

 

Se puderem me ajudar, agradeço.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Crie a função no BD

2) No SQL use a mesma no ORDER BY

 

select *
from ...
order by remove_acentos(nome)

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Crie a função no BD

2) No SQL use a mesma no ORDER BY

 

select *
from ...
order by remove_acentos(nome)
Fala Motta, td certo? Primeiramente obrigado pela resposta.

 

Minha dúvida é como criar a função no BD, tentei executar os comandos do link que você colocou, e deu um erro no MYSQL.

Mensagens do MySQL : Documentação
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@TEXTO VARCHAR (5000))RETURNS VARCHAR (5000)  AS
BEGIN
DECLARE @COMACENTOS VAR' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço a síntaxe do MlSql a procedure eu achei pelo Google.

 

Mas a ideia básica segua valendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço a síntaxe do MlSql a procedure eu achei pelo Google.

 

Mas a ideia básica segua valendo.

 

Hum, daí fico na mesma hehe. De qualquer forma, já me ajudou, vou ver se acho alguma forma de incluir essa função.

 

Outra sugestão seria converter os dados para utf8. Alguém sabe existe algum comando do MySQL que faça isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mauker Olimpio, bem vindo ao iMasters.

 

Agradecemos por compartilhar seu conhecimento conosco. Pedimos, entretanto, que continue a colaborar em tópicos mais recentes.

 

Este tem quase dois anos de idade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

baboseiras que foram ditas há 2 anos atrás

<_<

 

Não gosto de fazer isso, mas vou responder por mim mesmo, pois estou incluso nesses "2 anos", e também pelos outros que tentaram ajudar com alguma dica.

 

1. há dois anos atrás, onde vc estava para dar uma dica?

vc sabia resolver isso há 2 anos ?

Ok, não precisa responder, pois é irrelevante, apesar de servir para relfexão.

 

2. O post #14 soma-se as baboseiras. Agora são 3 anos de "baboseiras", pois está afirmando que "a única coisa que realmente resolve o problema de forma correta é a resposta do Mauker"

 

A dica do post #12 não é uma solução errônea, é apenas um meio e realmente pode ser uma boa solução para casos específicos. Todavia não é a solução correta e tampouca a única solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou seguir o exemplo do cidadão do post #5 ...

o amigo do post #14 talvez não estivesse num bom dia ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.