Re: Problema ILIKE con UNICODE

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: "Javier A(dot) Villalba" <javier(dot)villalba(at)gmail(dot)com>
Cc: PostgreSQL list ES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema ILIKE con UNICODE
Date: 2007-11-21 15:02:47
Message-ID: 20071121150247.GI4918@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Javier A. Villalba escribió:

> Hice mi tarea:
>
> => \encoding latin1
> => \encoding
> LATIN1
>
> => select * from test;
> nombre
> -----------------
> sebasti�n mu
> MAR�A MU�OZ
> (2 rows)

> Ayuda en algo?

Hmmm, me pregunto qué codificación tendrá el terminal ese. ¿Es latin1 o
UTF-8? Por este último resultado sospecho que es UTF-8.

En todo caso algo que no me había percatado es que el servidor es 7.4,
donde la funcionalidad de upper() y lower() solo funcionan en
codificaciones de un byte :-( No funciona en UTF-8. Así que tienes dos
alternativas:
1. actualizar a una versión más reciente, o
2. usar una codificación distinta para la base de datos

Repitiendo tu experimento acá con 7.4 obtengo tus mismos resultados.

Creo que lo que podrías hacer es usar to_ascii() para eliminar los
acentos antes de hacer las búsquedas. Un tropiezo aquí es que no se
puede convertir de UTF8 a ASCII directamente, así que debes hacer un
paso intermedio por Latin1:

alvherre=# select upper(to_ascii(convert('maría muñoz', 'utf8', 'latin1'), 'latin1'));
upper
-------------
MARIA MUNOZ
(1 row)

--
Alvaro Herrera http://www.amazon.com/gp/registry/DXLWNGRJD34J
"La rebeldía es la virtud original del hombre" (Arthur Schopenhauer)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-11-21 15:03:13 Re: fecha vacia
Previous Message Javier A. Villalba 2007-11-21 14:48:25 Re: Problema ILIKE con UNICODE