Foros del Web » Programación para mayores de 30 ;) » RegExp »

REGEXP y acentos

Estas en el tema de REGEXP y acentos en el foro de RegExp en Foros del Web. Hola, tengo un problema con las expresiones regulares contra MySQL. Toda la BD, tablas y campos son UTF8. Tengo una base de datos de productos ...
  #1 (permalink)  
Antiguo 17/04/2012, 02:58
 
Fecha de Ingreso: julio-2008
Ubicación: España
Mensajes: 29
Antigüedad: 15 años, 9 meses
Puntos: 0
Pregunta REGEXP y acentos

Hola, tengo un problema con las expresiones regulares contra MySQL.

Toda la BD, tablas y campos son UTF8.

Tengo una base de datos de productos y hago una busqueda por nombre. Quiero que si el usuario buscar sin poner los acentos, encuentre los productos aunque en la BD esté guardado con acentos.

Para ello estoy utilizando REGEXP pero me esta dando problemas. Por algun motivo creo que en las expresiones regulares no me funcionan los acentos.

Para buscar un producto con la palabra 'rápida' queria usar una query como esta:

Código PHP:
SELECT id FROM articulos WHERE nombre REGEXP 'r[aáàâä]p[iíìîï]d[aáàâä]' 
Pero no funciona, os pongo varias consultas que he probado y sus resultados:

Código PHP:
SELECT id FROM articulos WHERE nombre REGEXP 'rápid[aeiou]'
 
//Devuelve lineas con la palabra 'rápido' y con la palabra 'rápida'

SELECT id FROM articulos WHERE nombre REGEXP 'r[aá]p'
 
//Devuelve lineas con la palabra 'rap' pero no con 'ráp' 
Es como si la 'á' no funcionara dentro de los corchetes. Ya que buscando 'rápida' la consulta funciona.

Ya tengo pensadas varias soluciones alternativas (como tener otro campo nombre sin acentos), pero me gustaria salucionarlo sin tener que recurrir a eso.

Gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 17/04/2012, 04:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: REGEXP y acentos

Pregunta para responder leyendo el manual de referencia (lo primero que debes hacer siempre):
Cita:
En MySQL 5.0, si realmente quiere forzar a que la comparación realizada por REGEXP sea case sensitive, utilice la palabra clave BINARY para convertir a una de las cadenas en una cadena binaria. Esta consulta solamente encontrará coincidencia con 'b' minúsculas al comienzo de un nombre:
Como resulta obvio, si la comparación es por su valor binario, lo hará también con el valor de las letas acentuadas.

Tener en cuenta que:
Cita:
REGEXP y RLIKE usan el conjunto de caracteres actual (ISO-8859-1 Latin1 por defecto) al decidir el tipo de un carácter. Atención: Estos operadores no pueden trabajar con múltiples bytes.
Habría que también ver el efecto de las COLLATION en esta cláusula...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/11/2012, 12:46
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: REGEXP y acentos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pregunta para responder leyendo el manual de referencia (lo primero que debes hacer siempre):

Como resulta obvio, si la comparación es por su valor binario, lo hará también con el valor de las letas acentuadas.

Tener en cuenta que:


Habría que también ver el efecto de las COLLATION en esta cláusula...

gnzsoloyo, ¿Como se puede cambiar el conjunto de caracteres de REGEXP a UTF-8?
Yo tng exactamente el mismo problema que el autor de este post.
  #4 (permalink)  
Antiguo 16/11/2012, 13:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: REGEXP y acentos

Ya estás trabajando este tema en el Foro de MySQL.
No repitas temas, ni cuelgues posts en otros ajenos. No es gentil.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 16/11/2012, 15:09
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: REGEXP y acentos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Ya estás trabajando este tema en el Foro de MySQL.
No repitas temas, ni cuelgues posts en otros ajenos. No es gentil.
Ok lo siento, pero creia que verias antes aqui la respuesta.
He visto este post justo despues de haber creado el mio.
Sorry.

Gracias

Etiquetas: acentos, mysql, busquedas, utf-8
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:40.