Hola, el problema es el siguiente, en una bbdd con utf-8 al usar la cláusula order by en vez de ordenar: a, á, b ordena a, b, á es decir que entiende que las letras con tilde van después de la z. ¿ Conocen la forma de solucionar esto ? Gracias.
El orden en que se ordenan las cosas no tiene nada que ver con que utilizas utf8. ¿Qué valor LOCALE utilizas? ¿qué tienes en LC_COLLATE y LC_CTYPE?
Puedes usar "SHOW lc_collate;" y "SHOW lc_ctype;" en tu cliente psql para obtener estos valores.
Estos dos valores hay que definirlos cuando se inicializa PostgreSQL la primera vez. Hay que tener en cuenta que el uso de un locale diferente a C ó POSIX puede influenciar notablemente al rendimiento de tu sistema.
Muchas gracias por haber contestado tan rápido y con tan buena información, sin embargo el problema parece que residía en mi SO (OS X) que tiene enlazado por defecto el archivo LC_COLLATE hacia la_LN.US-ASCII. La solución es sencilla pero descubrirla puede hacerte perder mucho tiempo.
Por si alguien se encuentra con el mismo problema:
Re: Orden erróneo en utf-8
Vie, 04/09/2009 - 13:52 — rafaelmaEl orden en que se ordenan las cosas no tiene nada que ver con que utilizas utf8. ¿Qué valor LOCALE utilizas? ¿qué tienes en LC_COLLATE y LC_CTYPE?
Puedes usar "SHOW lc_collate;" y "SHOW lc_ctype;" en tu cliente psql para obtener estos valores.
Estos dos valores hay que definirlos cuando se inicializa PostgreSQL la primera vez. Hay que tener en cuenta que el uso de un locale diferente a C ó POSIX puede influenciar notablemente al rendimiento de tu sistema.
Más información aquí:
http://www.postgresql.org/docs/current/interactive/locale.html
--
Rafael Martinez
Webmaster
Muchas gracias por haber
Sáb, 05/09/2009 - 02:01 — JubeiMuchas gracias por haber contestado tan rápido y con tan buena información, sin embargo el problema parece que residía en mi SO (OS X) que tiene enlazado por defecto el archivo LC_COLLATE hacia la_LN.US-ASCII. La solución es sencilla pero descubrirla puede hacerte perder mucho tiempo.
Por si alguien se encuentra con el mismo problema:
borrar archivo LC_COLLATE
sudo rm /usr/share/locale/es_ES/LC_COLLATE
crear enlace nuevo hacia la_LN.ISO8859-15
sudo ln -s /usr/share/locale/la_LN.ISO8859-15 /usr/share/locale/es_ES/LC_COLLATE
Y enhorabuena por la página que está muy muy bien.
Enviar nuevo comentario