RE: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Ordenación con caracteres latinos

From: "David Prieto" <davidp(at)sgth(dot)es>
To: "'Xavier Vidal'" <xvpxvp(at)menta(dot)net>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Ordenación con caracteres latinos
Date: 2005-09-28 11:13:31
Message-ID: 002e01c5c41d$a8d871a0$1701a8c0@pcdavid
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Algo así imaginaba :-)

Supongo que la ordenación la haces con "select... Order by..." (es
decir, que el que ordena es el postgresql) y no recoges todos los datos
y los ordenas luego desde PHP, ¿verdad?

Tengo una base de datos creada con "createdb -E LATIN1". Por probar, he
creado una tabla e insertado varios valores y me sale:

select * from nombres order by nombre;
nombre
----------
García
Gómez
Gomez
Gonzalez

Es decir: PARECE que sale correctamente (sólo que "ó" va antes de "o").

Pero con más detalle:

select * from nombres order by nombre;
nombre
---------------
García
Gómez
Gómez Alonso
Gómez Pérez
Gomez
Gomez Alvarez
Gonzalez
(7 filas)

Esto ya no está bien. Gomez Alvarez debería ir antes que Gómez Pérez....

Se supone que postgresql usa las variables de entorno LC_COLLATE para
ordenar. Sería cuestión de asignar esa variable antes de lanzar
postgresql, y probar.

Más info en: http://www.postgresql.org/docs/7.4/interactive/charset.html

El problema es que esto no se puede cambiar así como así:

Check that PostgreSQL is actually using the locale that you think it
is. LC_COLLATE and LC_CTYPE settings are determined at initdb time and
cannot be changed without repeating initdb. Other locale settings
including LC_MESSAGES and LC_MONETARY are initially determined by the
environment the server is started in. You can check the LC_COLLATE and
LC_CTYPE settings of a database with the utility program pg_controldata.

Es decir: que lo que tuvieras en LC_COLLATE al hacer el initdb es lo que
se queda.

-----Mensaje original-----
De: Xavier Vidal [mailto:xvpxvp(at)menta(dot)net]
Enviado el: miércoles, 28 de septiembre de 2005 12:41
Para: David Prieto
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Ordenación con
caracteres latinos

Perdon, ha sido un error mio de copias y pegar

El ejemplo es este:

Primer apellido
------------------
Gomez
Guadix
Gómez

---- David Prieto <davidp(at)sgth(dot)es> escribió:
>
>
> Pues me parece más preocupante que "González" lo ordene antes que
> "Gomez"...
>
> Algo tienes que tener mal, para que la "n" la ordene antes que la "m".
>
>
> -----Mensaje original-----
> De: pgsql-es-ayuda-owner(at)postgresql(dot)org
> [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Xavier Vidal

> Enviado el: miércoles, 28 de septiembre de 2005 10:33
> Para: pgsql-es-ayuda(at)postgresql(dot)org
> Asunto: [pgsql-es-ayuda] Ordenación con caracteres latinos
>
>
> Saludos
>
> Tengo una base de datos en Latin 1, y me guarda perfectamente letras
> con acentos, eñes y demás...
>
> Pero la hora de recuperar datos ordenados, me aparecen así:
>
> Primer apellido
> ------------------
> González
> Gomez
> Guadix
> Gómez
>
> Como veis, la "o" con acento la considera posterior a la "u", y claro,

> queda bastante mal.
>
> Alguna sugerencia?
>
> P.D. : Los listados los saco por PHP
>
>
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 7: no olvides aumentar la configuracin del "free space map"
>
>
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 9: el optimizador ignorará el uso de recorridos de índice si los
> tipos de datos de las columnas no coinciden

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mauricio Zea (Gmail) 2005-09-28 12:38:09 Re: Cargar datos de una base de datos a otra base de datos
Previous Message Xavier Vidal 2005-09-28 10:41:25 Re: RE: [pgsql-es-ayuda] Ordenación con caracteres latinos