Consulta SQL y tildes

674 views
Skip to first unread message

aRamireZ

unread,
May 14, 2008, 6:24:45 AM5/14/08
to symfony-es
Hola a todos, llevo con una duda varios días y no se como
solucionarla, seguro que aquí encontrais la solución.

Utilizo MySQL y tengo una BBDD codíficada en UTF-8 y en la web tengo
un formulario de búsqueda. Cuando hago una búsqueda con tildes con el
tema de la codificación UTF-8 no hay problemas, las reconoce
perfectamente.

Lo que quiero conseguir es que el usuario introduce una palabra (o
varias) sin tilde, pero el la BBDD si que tiene tilde, la reconozca
igualmente (al estilo google), es decir, que no distinga entre
palabras con/sin tilde.

No puedo utilizar la búsqueda full-text de MySQL.

Lo que había pensado es primero convertir la cadena en minúsculas y
luego con varios STR_REPLACE cambiar los caracteres con tildes a sin
tildes, así tendría una cadena que podría comparar con la cadena de
texto del formulario (tratada igualmente). Esto sería una búsqueda
completa.

Mi problema viene cuando intento hacer ésto con Criteria, con el que
aún no me manejo muy bien. Si ésto lo tuviese que conseguir con SQL a
pelo no tendría más problemas, pero con Criteria la cosa cambia. Había
pensado en utilizar SQL con la función sprintf para formatearla, pero
me retraigo de ésto porque el resultado de la búsqueda tam bien se
pagina y este sistema de paginación lo hago con sf_page, el cual
utiliza Criteria, `por lo cual vuelvo a atrás.

Seguro que ustedes encuentran alguna solución a este tocho que he
escrito.

De nuevo y una vez más, muchas gracias de antemano y un saludo.

Luciano A. Andrade

unread,
May 15, 2008, 8:58:40 AM5/15/08
to symfo...@googlegroups.com
Con criteria no creo que se pueda, porque deberia soportarlo DB y si
bien MYSQL tiene alguna funciones (nunca las use, pero creo que para
eso es el encoding) no creo que lo puedas hacer. Lo mejor que se me
ocurre es que en lugar de buscar
"í"
busques "i", "í","I", "Í" es decir remplaces la i por todas las
combinaciones de i (sola, con tilde, mayuscula o minuscula), pero si
queres hacer una busqueda tipo "google" usa sfLucenePlugin.

2008/5/14 aRamireZ <albe...@ono.com>:

Cristian Castillo

unread,
May 15, 2008, 1:37:16 PM5/15/08
to symfo...@googlegroups.com
Realmente no debería haber problemas en usar Criteria::LIKE al realizar las búsquedas de texto.
Si el campo de la tabla está cotejada en UTF8-generic o utf8-spanish o similar,  la búsqueda retornará resultados sin distinguir tildes.

OJO, si tu base está en utf-8, en database.yml debe existir una línea  "encode: utf8"
Por ejemplo la mia es:
---------------------------------------------------------
all:
  propel:
    class:          sfPropelDatabase
    param:
      dsn:          mysql://miusuario:miclave@localhost/mibase
      encoding:     utf8
---------------------------------------------------------
Por ejemplo, para buscar textos utilizo:
-----------------------------------------------------------
$c = new Criteria;
$c->add(TablaPeer::COLUMNA,"%$texto%",Criteria::LIKE);
$resultados = TablaPeer::doSelect($c);
-----------------------------------------------------------
Y los resultados son independientes de si el texto está con tildes o no, ya que el cotejamiento de COLUMNA es utf-generic.



2008/5/15 Luciano A. Andrade <andrade...@gmail.com>:

aRamireZ

unread,
May 16, 2008, 3:50:18 AM5/16/08
to symfony-es
Gracias por vuestras respuestas, siempre estáis ahí para responder a
nuestras consultas.

Luciano A. Andrade eso mismo es lo que estoy haciendo, busco todas las
combinaciones posibles de las vocales: mayusculas, minusculas, tildes,
no tildes. Pero me crea un tocho de consulta SQL (aunque no tarda mas
de 0,001 seg). Otro problema es que no busco todas las combinaciones
posibles y si hacen una búsqueda de más de una palabra (y éstas llevan
tilde) no me da resultado.
En cuanto al plugin Lucene, no lo conocía parece realmente útil,
lástima que no tenga tiempo para implementarlo. Para el próximo
proyecto lo incorporo!!

Cristian Castillo: la codificación de la BBDD está en utf8, y si pongo
la línea que me dices: "encoding: utf8" me da errores en la
codificación: me muestra los textos directamente con el caracter utf8,
es decir, en vez de mostrarme el caracter con su tilde me lo muestra
con la codificación.
Sin embargo si cambio la línea por esta siguiente: "encode: utf8" si
que me muestra los caracteres bien.
De todas formas, ponga la línea que ponga: encode o encoding, las
búsquedas las sigue interpretando con sensibilidad a tildes. Si busco
fotografía me muestra el texto perfectamente, pero si busco fotografia
no me lo muestra.

Optaré por la opción que tengo implementada ahora mismo, aunque tenga
es problema con las busquedas para más de una palabra.

Gracias de nuevo.
Reply all
Reply to author
Forward
0 new messages