Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ignorar acentos

Estas en el tema de Ignorar acentos en el foro de Mysql en Foros del Web. Hola a todos! Tengo una BD con palabras con acentos (tildes) y deseo que cuando hago la consulta las tildes sean ignoradas... he leido que ...
  #1 (permalink)  
Antiguo 18/12/2008, 19:13
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Ignorar acentos

Hola a todos!
Tengo una BD con palabras con acentos (tildes) y deseo que cuando hago la consulta las tildes sean ignoradas... he leido que debo cambiar el collation a
latin_1 General AI (o algo asi) pero en mi mysql 5.0 Comunity no logro hacerlo.

Gracias por su ayuda.
  #2 (permalink)  
Antiguo 19/12/2008, 01:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ignorar acentos

Si usas latin1 como charset, puedes hacer que el campo sobre el que realizas la búsqueda sea case insensitive, es decir, que no distinga los acentos. Puedes hacerlo en el PHPMyAdmin cambiando el cotejamiento de ese campo a, por ejemplo, latin1_general_ci o latin1_spanish_ci.
O si prefieres hacerlo desde el SQL de PHPMyAdmin o desde consola, la sintaxis es esta (cambias nombre por el nombre del campo y pones el tipo de campo y tamaño que tengas en lugar de VARCHAR(30)). Lo unico que estás haciendo es cambiar la collation o cotejamiento de ese campo.

ALTER TABLE `tabla` CHANGE `nombre` `nombre` VARCHAR( 30 ) CHARACTER SET latin1 COLLATE latin1_general_ci

Luego haces la consulta.
  #3 (permalink)  
Antiguo 20/12/2008, 09:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ignorar acentos

Gracias por la resuesta pero no me funciona...
yo tengo en la base de datos por ej:
María (Maria con tilde)
y si busco maria (sin tilde) no me ecuentra nada,

sospecho que el CI (case insensivity) es para ignorar
mayusculas, yo necesitaria algo como AI (accent insensivity)...

alguna idea? Gracias!
  #4 (permalink)  
Antiguo 20/12/2008, 10:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ignorar acentos

¿Pero lo buscarás con LIKE no con =?
Prueba así:
SELECT * FROM tutabla WHERE nombre LIKE 'Maria'

Creo que si tienes el cotejamiento que te dije, encontrarás todas las "Marías"
  #5 (permalink)  
Antiguo 20/12/2008, 13:24
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ignorar acentos

Gracias jurena por tu tiempo, pero
no lo puedo hacer funcionar....
estoy haciendo lo siguiente:

SELECT * FROM mi_tabla WHERE Nombre LIKE '%maria%'"

y no me devuelve resultados en cambio con:

SELECT * FROM mi_tabla WHERE Nombre LIKE '%mar%'"

me devuelve todas las marias.

el charset de la pagina guia.php esta en latin1 y el collation del campo
'Nombre' esta en: latin1_general_ci

no se en que me estoy equivocando...

Gracias, otra vez!
  #6 (permalink)  
Antiguo 20/12/2008, 15:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ignorar acentos

ya creo haber visto tu problema. Usa la collation o cotejamiento latin1_spanish_ci

ALTER TABLE `tabla` CHANGE `nombre` `nombre` VARCHAR( 30 ) CHARACTER SET latin1 COLLATE latin1_spanish_ci

Y luego nos cuentas.

El error fue mío por aconsejarte la latin1_general_ci para eso: LO SIENTO

Última edición por jurena; 20/12/2008 a las 15:34
  #7 (permalink)  
Antiguo 20/12/2008, 19:27
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ignorar acentos

ya intente con latin1_general ci
y con latin1_spanish_ci y no funciona...

debe ser que mi version de mysql no lo permite,
creo que voy a tener que buscaqr otra solucion...
como por ejemplo crear un nuevo campo para
reescribir las palabras sin acento o algo asi...

si a alguien se le ocurre algo, que por favor me
avise.

Gracias
  #8 (permalink)  
Antiguo 21/12/2008, 02:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ignorar acentos

1) Dinos qué versión de Mysql utilizas.

Si usas PHPMyAdmin, dinos
2) qué cotejamiento usas para la base (deberías poner latin1_spanish_ci)
qué cotejamiento para la tabla donde tienes el campo (deberías poner latin1_spanish_ci)
3) qué cotejamiento para el campo donde escribes 'María'.(deberías poner latin1_spanish_ci)
4) qué cotejamiento usas para el archivo guia.php, que imagino es donde tienes el formulario con un input de tipo text donde escribes el nombre que buscas (debe ser guardado como ANSI en el sistema operativo de Microsoft, no sé en otros, pero imagino que será ISO-8859-1.
6) Si muestras en ese archivo no creo que haga falta nada más; pero si tienes otro archivo html o php donde muestres el dato, debería ser codificado también como ANSI o ISO-8859-1.
7) No creo que tu servidor funcione con otra codificación, sino que usará ISO-8859-1 por defecto, tanto para la recepción de datos como para la devolución de los datos. No obstante, para por si las moscas, añades tras realizar la conexión y seleccionar la base, mysql_query("SET NAMES 'ISO-8859-1'")

Si tienes todo esto y los meta tags en los archivos PHP y HTML, ya no sé qué puede estar ocurriendo, pues debería, creo, estar funcionando.

Imagino que no estarás usando ninguna función de conversión de tipos, ni el CSS esté cambiando nada en la parte donde introduces el texto...
  #9 (permalink)  
Antiguo 21/12/2008, 16:04
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ignorar acentos

Gracias jurena!

Voy a repasar los pasos que me dijiste uno a uno con calma.
Seguro que estoy fallando en algo...
Mas tarde comento los resltados.

Saludos
  #10 (permalink)  
Antiguo 21/12/2008, 17:04
 
Fecha de Ingreso: marzo-2007
Mensajes: 89
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Ignorar acentos

Ahora SI!!!
Gracias jurena!!!

Problema resuelto.
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:00.