-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

2008/1/17 Luiz Rafael Culik Guimaraes :

> eu tenho um banco  criado como encoding latin1.
>
> mas um select traz na minha opiniao na ordem errada, ja que o codigo ascii
> do - e
> select sr_recno, cod_fab, indkey_004 from adm021_dbf where
>  cod_fab like '6PK%' order by cod_fab ;
>  ----------+----------+---------------------------------------
>       3314 | 6PK0860  | 6PK0860     3400761320           3314
>       4023 | 6PK-0860 | 6PK-0860    4000761275           4023
>       3315 | 6PK0870  | 6PK0870     3400761330           3315

Codificação de caracteres não tem nada com isso...

> os registros que tem - nao deviam ser os primeiros?

De acordo com ASCII, sim.  De acordo com COLLATE, nao.

A questão aqui não é o banco e sim glib.

Veja:

[EMAIL PROTECTED]:/usr/share/i18n/locales$ locale | grep COLLATE
LC_COLLATE="pt_BR.UTF-8"
[EMAIL PROTECTED]:/usr/share/i18n/locales$ sort ~/Desktop/sort.txt
6PK-0860
6PK0860
6PK-0870
[...]

[EMAIL PROTECTED]:/usr/share/i18n/locales$ export LC_ALL=C
[EMAIL PROTECTED]:/usr/share/i18n/locales$ sort ~/Desktop/sort.txt
6PK-0860
6PK-0870
6PK-0895
[...]

Existem algumas incoerencias no template (ISO-14651) de locale que
utilizamos para formar nosso pt_BR. Uma delas o Walter resolveu aqui
[1]. Porém existem tantas outras que vale uma  nova thread.

<off-topic>
Caso exista algum candidato disposto a trabalhar  o hífen (<U002D>) em
nosso COLLATE,
estou aberto a discussões sobre criar uma rule para agrupamento de
acordo com o nosso alfabeto.
</off-topic>

Voltando ao problema, existem alguns paleativos (leia-se gambi ...)
para contornar o problema:

1. A forma clássica seria alterar o locale do cluster para 'C'. Este
não utiliza as regras do COLLATE pt_BR e funciona, mas existem efeitos
colaterais :-).

2. Já que a regra a ser utilizada no caso de <U002D> é a de substituição,
então engane o COLLATE:
  ORDER BY REPLACE(cod_fab,'-','A');

;-)

afe!

[1]
http://www.nabble.com/ordena%C3%A7%C3%A3o-e-libc---uma-poss%C3%ADvel-solu%C3%A7%C3%A3o-%28podem-me-ajudar-a-testar-%29-td6883324.html#a6886505

Abraço!

-Leo
-- 
Leonardo Cezar et all
http://www.dextra.com.br/postgres
http://www.postgresql.org.br
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHkLFgdFix3H/e1DkRAqWuAJ4+dNbzKVRAjq9/qCn8J7ZHIi+ptwCfYHS4
Otgql/wxVd9xJOONU+Zigf8=
=yEXX
-----END PGP SIGNATURE-----
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a