Foros del Web » Programando para Internet » PHP »

Consulta insensible a tildes

Estas en el tema de Consulta insensible a tildes en el foro de PHP en Foros del Web. Hola. Tengo una base de datos MySQL con cortejeamiento de las conexiones utf8_general_ci. Los valores con tilde se guardan así en la base de datos. ...
  #1 (permalink)  
Antiguo 05/11/2013, 03:24
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Consulta insensible a tildes

Hola.

Tengo una base de datos MySQL con cortejeamiento de las conexiones utf8_general_ci. Los valores con tilde se guardan así en la base de datos. Ejemplo:

En lugar de "Camión", se guarda como "Camión".

Entonces, si realizo esta consulta no obtengo ningún resultado:

SELECT * FROM tabla WHERE vehiculos LIKE '%camion%'

Debido a que el termino buscado puede ser con tildes (camión), sin tildes (camion), incluso mal escritas (cámion) no puedo hacer un reemplazamiento previo por lo que no sé como solucionarlo. Sé que si en la DB de MySQL estuviese tal cual "Camión" en lugar de "Camión" sí que funcionaría.

¿Qué puedo hacer?
  #2 (permalink)  
Antiguo 05/11/2013, 04:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta insensible a tildes

pide ayuda en el foro de programación, pues la codificación y el cotejamiento, utf8 y utf8_general_ci respectivamente, están bien. Tu problema es que el servidor debe conocer cuál es tu codificación, los archivos para cargar deben hacerlo en la codificación en la que trabajas (archivos .php y .html, con los meta apropiados). Pide ayuda en el foro del programa con el que trabajas.
  #3 (permalink)  
Antiguo 05/11/2013, 05:08
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por jurena Ver Mensaje
pide ayuda en el foro de programación, pues la codificación y el cotejamiento, utf8 y utf8_general_ci respectivamente, están bien. Tu problema es que el servidor debe conocer cuál es tu codificación, los archivos para cargar deben hacerlo en la codificación en la que trabajas (archivos .php y .html, con los meta apropiados). Pide ayuda en el foro del programa con el que trabajas.
No estoy seguro de lo que dices pero me parece que no porque desde la consola de MySQL he ejecutado la consulta y no obtengo resultados por lo que la codificación de los .php y sus respectivos meta no son. Sin embargo, desde la consola sí que funcionan todas las consultas que no tienen tildes. Por lo que eso que dices lo descarto...
  #4 (permalink)  
Antiguo 05/11/2013, 06:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta insensible a tildes

Si los datos los has guardado con programación y no desde consola, el problema está ya en el modo en que están guardados los datos. Se trata de un problema recurrente. Haz una búsqueda en el foro y verás que siempre se suelen solucionar en programación, salvo que tengas control completo sobre el servidor, al menos por lo que se refiere a los nuevos datos que cargues. Las consultas sin tilde deben funcionar todas, desde consola y desde programación, porque el problema es que en una base de datos con una codificación se ha almacenado un texto guardado con otra codificación.
  #5 (permalink)  
Antiguo 05/11/2013, 08:19
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: Consulta insensible a tildes

¿Con qué lenguaje estás trabajando?
__________________
¿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 05/11/2013, 08:48
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Con qué lenguaje estás trabajando?
MySQL y PHP.
  #7 (permalink)  
Antiguo 05/11/2013, 09:48
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Consulta insensible a tildes

Como guardas esos datos?
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #8 (permalink)  
Antiguo 05/11/2013, 11:39
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por SkAr88 Ver Mensaje
Como guardas esos datos?
Explícate. Imagino que te referirás a que los envío con php mediante un sencillo código INSERT en MySQL desde PHP.
  #9 (permalink)  
Antiguo 05/11/2013, 11:51
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Consulta insensible a tildes

Tu codigo, ya que sin el es dificil ayudarte
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #10 (permalink)  
Antiguo 05/11/2013, 12:04
 
Fecha de Ingreso: febrero-2010
Mensajes: 7
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Hola, intenta modificando el conjunto de caracteres predeterminado para tu conexión:

Dependiendo de lo que uses:

Código PHP:
Ver original
  1. mysql_query("SET NAMES utf8");
  2. $mysqli->query("SET NAMES 'UTF8'");

Para más info. visita:

- http://www.php.net/manual/es/mysqli.set-charset.php
- http://www.forosdelweb.com/f86/correcto-set-names-utf8-649670/
  #11 (permalink)  
Antiguo 05/11/2013, 15:46
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Resumo lo básico de mi código. He creado un "ejemplo.php" con muy pocas líneas de código porque como digo el problema lo sigo teniendo igual y cuanto más le doy vueltas menos lo entiendo.

Tengo esto:
Código PHP:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

También tengo esto en el .htaccess:
Código PHP:
Ver original
  1. AddDefaultCharset UTF-8

En la DB cortegeamiento utf8_general_ci:
En lugar de "Camión", se guarda como "Camión". Lo he ingresado a mano desde la consola no desde php para hacer estas pruebas.

Luego si hago la consulta desde la consola no obtengo ningún resultado:
Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE vehiculos LIKE '%camion%'

Pero que yo sepa necesito usar UTF8 para que el usuario final no vea rombos ni caracteres raros.

Como he dicho arriba si en la DB lo guardo tal cual, "camión" en lugar de "camión" sí que funciona.

Creo que me estoy repitiendo dando vueltas sobre el mismo punto.

Última edición por juanito_29899; 05/11/2013 a las 15:52
  #12 (permalink)  
Antiguo 05/11/2013, 15:53
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Consulta insensible a tildes

Yo tenía el mismo problema, lo resolví así:

1.- La tabla es: latin1_general_ci
2.- Los campos son: utf8_general_ci
3.- En el <Head> coloqué: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" >

Es todo... Espero te pueda servir.
  #13 (permalink)  
Antiguo 06/11/2013, 04:08
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por Bier Ver Mensaje
Yo tenía el mismo problema, lo resolví así:

1.- La tabla es: latin1_general_ci
2.- Los campos son: utf8_general_ci
3.- En el <Head> coloqué: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" >

Es todo... Espero te pueda servir.
He probado a cambiar el charset utf8 por el iso-8859-2 en el ejemplo.php de prueba que hice y no funciona (¿tal vez le fuerze el .htaccess al meta a ser utf-8?), pero me he fijado que mis campos son utf8_general_ci pero mi tabla es latin1_swedish_ci.

Pregunto:
-¿Si cambio la tabla de "latin1_swedish_ci" a "utf8_genereal_ci" o a "latin1_general_ci" se "destrozarán" los caracteres de la tabla?

-¿Puede ser ese el problema, es decir, que los campos estén en una codificación y la tabla en otra?
  #14 (permalink)  
Antiguo 06/11/2013, 05:41
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por juanito_29899 Ver Mensaje
He probado a cambiar el charset utf8 por el iso-8859-2 en el ejemplo.php de prueba que hice y no funciona (¿tal vez le fuerze el .htaccess al meta a ser utf-8?), pero me he fijado que mis campos son utf8_general_ci pero mi tabla es latin1_swedish_ci.

Pregunto:
-¿Si cambio la tabla de "latin1_swedish_ci" a "utf8_genereal_ci" o a "latin1_general_ci" se "destrozarán" los caracteres de la tabla?

-¿Puede ser ese el problema, es decir, que los campos estén en una codificación y la tabla en otra?
Considero lo primero es que resuelvas la plataforma adecuada para almacenar tu información, es decir. Inicia tu proyecto de cero y verifica que ya todo funciona correcto.

Posteriomente, la tarea será el integrar los datos anteriores.

Es mi recomendación.
  #15 (permalink)  
Antiguo 06/11/2013, 07:14
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: Consulta insensible a tildes

Es un sabio consejo.
Muchas veces partir de cero es mucho más sencillo y eficiente que intentar parchar algo que no sabes donde falla.
Yo mismo he tirado a la basura codigos completos, para poder hacerlos bien, porque con tantas "reparaciones", al final pierdes el rastro de los bugs.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 06/11/2013, 07:23
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Consulta insensible a tildes

Lo otro que puede hacer antes de insertar los datos es

Código PHP:
Ver original
  1. $var=utf8_encode($var);
asi para cada variable
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #17 (permalink)  
Antiguo 06/11/2013, 08:00
 
Fecha de Ingreso: febrero-2010
Mensajes: 7
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Probaste al ejecutar la query o en la conexión:

Código PHP:
Ver original
  1. mysql_query("SET NAMES utf8");

o:

Código PHP:
Ver original
  1. $mysqli->set_charset("utf8");

Código PHP:
Ver original
  1. $mysqli->query("SET NAMES 'UTF8'");
  #18 (permalink)  
Antiguo 06/11/2013, 09:41
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por vartob Ver Mensaje
probaste al ejecutar la query o en la conexión:

Código php:
Ver original
  1. mysql_query("set names utf8");

o:

Código php:
Ver original
  1. $mysqli->set_charset("utf8");

Código php:
Ver original
  1. $mysqli->query("set names 'utf8'");
Sí y nada.
  #19 (permalink)  
Antiguo 06/11/2013, 09:46
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por juanito_29899 Ver Mensaje
Sí y nada.
Y lo que te dije al ultimo?
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #20 (permalink)  
Antiguo 06/11/2013, 11:55
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Consulta insensible a tildes

Cita:
Iniciado por SkAr88 Ver Mensaje
Lo otro que puede hacer antes de insertar los datos es

Código PHP:
Ver original
  1. $var=utf8_encode($var);
asi para cada variable
Así es como lo tenía antes en la BD de MySQL almacenado tal cual (Camión). Pero para no tener que hacer utf8_enconde($variable) y utf8_deconde($variable) todas las veces que usaba la BD lo metí como os he comentado.

¿Vosotros como almacenáis los datos en la DB para proyectos normales y corrientes?
  #21 (permalink)  
Antiguo 06/11/2013, 12:27
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: Consulta insensible a tildes

utf-8

...Y programando con cuidado, con muchas pruebas intermedias, para ver donde se va la cosa de lugar...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 06/11/2013, 13:50
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Consulta insensible a tildes

Tambien puedes usar mysql_real_escape_string
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #23 (permalink)  
Antiguo 06/11/2013, 14:53
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: Consulta insensible a tildes

Cita:
Iniciado por SkAr88 Ver Mensaje
Tambien puedes usar mysql_real_escape_string
Bueno, esa es una de las cosas que se tienen que usar... pero no es la única.
__________________
¿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: mysql, select, tabla, 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.
Respuesta




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