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

[SOLUCIONADO] problemas con la codificacion de la base de datos al buscar con tildes/acentos

Estas en el tema de problemas con la codificacion de la base de datos al buscar con tildes/acentos en el foro de Mysql en Foros del Web. Estimados: soy algo novato y estoy trabajando con un pequeño carrito de compras que heredé de otro programador, el problema, puntualmente, es que el buscador ...
  #1 (permalink)  
Antiguo 20/08/2014, 11:56
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 5 meses
Puntos: 2
Pregunta problemas con la codificacion de la base de datos al buscar con tildes/acentos

Estimados:

soy algo novato y estoy trabajando con un pequeño carrito de compras que heredé de otro programador,
el problema, puntualmente, es que el buscador distingue palabras con y sin acento, es decir si pongo la palabra 'equinacea' no me encuentra el resultado que hay en la DB 'equinácea'

quisiera que al poner 'equinacea' me saliera el resultado 'equinácea' ...

Viendo la DB desde PhpMyAdmin encuentro este mismo registro como 'Equinácea' ...

El cotejamiento la base de datos, tabla y campos actualmente es utf8_general_ci

La codificacion de caracteres del archivo php es utf-8, así como el charset en la etiqueta head

la sentencia php con el select:
Código SQL:
Ver original
  1. SELECT *
  2. FROM productos2
  3. WHERE descripcion LIKE '%".$criterio."%' OR codigo LIKE '%".trim($criterio)."%'
  4. OR categoria LIKE '%".$criterio."%'
  5. ORDER BY categoria, descripcion ASC

la funcion de conexion y la funcion de consulta:
Cita:
Editado: Código de programación no permitido en foros de Bases de DAtos.
Leer las normas del foro, por favor.
espero puedan guiarme,

gracias

Última edición por gnzsoloyo; 20/08/2014 a las 12:06
  #2 (permalink)  
Antiguo 20/08/2014, 12:09
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, 5 meses
Puntos: 2658
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Cita:
Viendo la DB desde PhpMyAdmin encuentro este mismo registro como 'Equinácea' ...
TE comento que en principio, si eso se ve así en phpMyadmin, es altamente probable que los datos ya estén corruptos. De lo contrario deberías verlos perfectamente.

Eso suele pasar no en la etapa de lectura de datos, sino en la inserción de los datos, donde se cometió el error, por ejemplo, de dejar la conexión como Latin1, y no como UTF8.
Si eso es lo que pasó, el resultado volverá siempre corrupto porque ya está asi. Necesitarás entonces realizar unadepuración algo complicada para eliminar los errores.

PD: Lee las normas del foro, por favor. No se tratan ni postean códigos de programación de ningún lenguaje fuera de SQL en los foros de BBDD.
__________________
¿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 20/08/2014, 12:19
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Cita:
Necesitarás entonces realizar unadepuración algo complicada para eliminar los errores.
Como debo entonces depurarla?
  #4 (permalink)  
Antiguo 20/08/2014, 12:27
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Con esta sentencia se podrá solucionar?

Código:
SELECT convert(cast(convert(content using latin1) as binary) using utf8) AS content
  #5 (permalink)  
Antiguo 20/08/2014, 12: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, 5 meses
Puntos: 2658
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Lamento decirtelo, pero a mano, con dversas queries, y mucha paciencia...

Básicamente deberás buscar las cadenas incorrectas y hacer que se reemplacen los strings por cada caso.
Eso, o buscar los datos de origen y reconstruir la base.

Un ejempo sería, algo como:
Código MySQL:
Ver original
  1. UPDATE productos2
  2. SET descripcion = IF(INSTR(descripcion, 'á')> 0 ,REPLACE(descripcion, 'á', 'à') , descripcion),
  3. codigo = IF(INSTR(codigo , 'á')> 0 ,REPLACE(codigo , 'á', 'à') , codigo ),
  4. categoria = IF(INSTR(categoria , 'á')> 0 ,REPLACE(categoria , 'á', 'à') , categoria );
Este esquema correspondería, según tu ejemplo, a la "a" acentuada, pero habrá que ubicar todas las cadenas a reemplazar para el resto de los casos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/08/2014, 12:32
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, 5 meses
Puntos: 2658
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Cita:
Iniciado por estudioplateado Ver Mensaje
Con esta sentencia se podrá solucionar?

Código:
SELECT convert(cast(convert(content using latin1) as binary) using utf8) AS content
No.
Como ya te dije, si los datos están corruptos, eso no funcionaría.
Eso sirve para convertir un dato existente en un charset determinado, en otor de salida.
En tu caso, el charset es UTF8, según entiendo, pero cuando se lo insertó llegó mal formateado en la conexión, por lo que a la tabla de MySQL entró como cadena corrupta en UTF8, cuando su origen en la aplciación era diferente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 20/08/2014, 12:41
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

gracias

duda: pusiste el acento alreves aquí en la letra 'a' por algo en particular?
Código:
REPLACE(descripcion, 'á', 'à')
gracias de nuevo,
  #8 (permalink)  
Antiguo 20/08/2014, 12:51
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Cita:
Iniciado por gnzsoloyo Ver Mensaje
TE comento que en principio, si eso se ve así en phpMyadmin, es altamente probable que los datos ya estén corruptos. De lo contrario deberías verlos perfectamente.

Eso suele pasar no en la etapa de lectura de datos, sino en la inserción de los datos, donde se cometió el error, por ejemplo, de dejar la conexión como Latin1, y no como UTF8.
Si eso es lo que pasó, el resultado volverá siempre corrupto porque ya está asi. Necesitarás entonces realizar unadepuración algo complicada para eliminar los errores.
Creo que te referís a esto ...

saludos,
  #9 (permalink)  
Antiguo 20/08/2014, 13:04
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, 5 meses
Puntos: 2658
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Exactamente.
Interesante link y bastante útil. Lo voya agregar a las herramientas.
Gracias.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 20/08/2014, 14:08
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Acabo de solucionar el problema, ahora la aplicación no distingue los acentos!

gracias!
  #11 (permalink)  
Antiguo 20/08/2014, 14:11
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, 5 meses
Puntos: 2658
Respuesta: problemas con la codificacion de la base de datos al buscar con tildes/ace

Bueno... ahora viene la segunda parte: Debuggear la aplicación para asegurarte que por un lado inserte bien las cosas, de modo que los datos no se corrompan, y además debuggear la visualizacion de los datos, para comprobar que los obtenga como debe...
Como te dije al principio, es cosa de mucha paciencia.

:arriba.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: buscador, cotejamiento, tildes
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 17:20.