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

MySQL - como no discernir caracteres con acentos

Estas en el tema de MySQL - como no discernir caracteres con acentos en el foro de Mysql en Foros del Web. Hola estimados, he leído muchas veces estos foros y los encuentro realmente útiles...me decido a participar, ya que también desarrollo web. Mi consulta es la ...
  #1 (permalink)  
Antiguo 24/03/2009, 09:26
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
MySQL - como no discernir caracteres con acentos

Hola estimados, he leído muchas veces estos foros y los encuentro realmente útiles...me decido a participar, ya que también desarrollo web.

Mi consulta es la siguiente, tengo un MySQL con una base de datos en UTF-8 ... mi problema es que en las búsquedas siempre me discierne los caracteres con acento gráfico (o sea, en mi buscador "águila" no es lo mismo que "aguila") lo cual no permite a los usuarios buscar correctamente (de hecho "á" no es lo mismo que "Á").

¿Por donde iría la solución? He buscado acerca de las Collations pero no me ha ayudado mucho lo encontrado.

Por cierto, usamos UTF-8 como juego de caracteres y utf8-spanish2-ci como collation, por si esos datos son relevantes.

Saludos a todos.
  #2 (permalink)  
Antiguo 24/03/2009, 11:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: MySQL - como no discernir caracteres con acentos

usa utf8_unicode_ci como collation o cotejamiento para el campo en el que quieras buscar por igual con vocales con acento o sin él, mayúsculas y minúsculas. Haz la prueba y dinos si es lo que quieres.
  #3 (permalink)  
Antiguo 24/03/2009, 13:33
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

No pasa nada...las búsquedas siguen distinguiendo los caracteres con acento.

Busco con "exito" y no me devuelve strings que contienen "éxito" que es lo que necesito. (Así como la búsqueda en google, que le da lo mismo entre "á" y "a")
  #4 (permalink)  
Antiguo 24/03/2009, 13:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: MySQL - como no discernir caracteres con acentos

Revisa esto:
http://www.stan.com.mx/topics/view/12
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 24/03/2009, 14:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: MySQL - como no discernir caracteres con acentos

Como se dice en el enlace que te ha recomendado David el Grande:

Cita:
Como vimos en los ejemplos de arriba, la colación utf8_spanish_ci no distingue entre:


vocales con tilde (acento ortográfico) o sin tilde
letras con diéresis o sin diéresis
minúsculas y mayúsculas
Pero igual ocurre con la que te propuse. Prueba utf8_spanish_ci como collation o cotejamiento de ese campo, pero si no funcionara tampoco deberías revisar la codificación de los archivos html o PHP que usas para cargar la consulta (tal vez estás usando una codificación distinta a la utf8 en esos archivos y ese es el problema), y controlar, además, la codificación de la base como utf8 y el cotejamiento o collation de los campos, para que todo funcione bien.
  #6 (permalink)  
Antiguo 25/03/2009, 13:10
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

revise y al parecer el problema esta en el mysql...tengo estas variables de sistema :

character set client utf8
(Global value) latin1
character set connection utf8
(Global value) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Global value) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
(Global value) latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci

El phpmyadmin me muestra las entradas "Muere diplomático estadounidense víctima" y en la pagina, que muestra en utf-8 se ve todo bien. usando la consola mysql se ve todo bien tb(el terminal esta configurado con utf-8)...

cuando a la consulta la fuerzo a usar collate utf8_spanish_ci (usando la consola) me aparece :

ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'

estoy algo confundido
  #7 (permalink)  
Antiguo 25/03/2009, 13:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: MySQL - como no discernir caracteres con acentos

Está claro que usas una codificacion latin1 y una collation de utf8. Tendrás que decidirte primero por la codificación; luego trataremos de aconsejarte sobre la collation. Ese es el problema. Pero eso lo tendrás que decidir tú. Primero dinos cómo tienes de avanzado tu proyecto, cuántos datos tienes incluidos y su naturaleza para que te podamos orientar, si tratas de hacer una base internacional o no es necesario, etc.
  #8 (permalink)  
Antiguo 25/03/2009, 13:32
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

Es una base ya hecha, se supone que para mayor compatibilidad, lo ideal seria utilizar utf8. Tenemos una cantidad de datos considerable ya, que son noticias y la informacion en la BD esta en utf8

Última edición por Leprosy; 25/03/2009 a las 14:03
  #9 (permalink)  
Antiguo 25/03/2009, 14:05
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: MySQL - como no discernir caracteres con acentos

Hola. te cuento... hace un tiempo tube el mismo problema y finalmente me decidi por poner todo con utf8_general_ci, tanto la base de datos como cada tabla, ademas al crear los campos nuevos tambien lo hago con utf8_general_ci......
ademas todo lo monte sobre un servidor Fedora que vien por defecto con UTF-8, y como si fuera poco cuando me conecto desde php al iniciar la clase para manejar la base de datos envio la instruccion
mysql_query( "SET NAMES 'utf8'", $this->connection );

esta demas decirte la cantidad de trabajo que me ahorre con esa configuracion....
desde ese encontes no he tendo mas problemas con ñ acentos y otros ni siquiera en las busquedas....

saludos
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #10 (permalink)  
Antiguo 25/03/2009, 14:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: MySQL - como no discernir caracteres con acentos

leprosy,
sé prudente, pues la base la tienes, si no me equivoco, codificada en latin1. Si cambias a utf8 la codificación sin hacer copia de seguridad antes y emplear un método adecuado para el cambio, podrás causar un daño irreparable en tus datos.
Yo, que uso siempre utf8, que soy además uno de sus mayores defensores, y empleo el método seguido por omar1977, te aconsejaría que lo primero hicieses una copia de respaldo de lo que tienes antes de iniciar cualquier acción. Luego te diría que si la base ya está muy avanzada y asentada pensaras si debes de cambiar toda la codificación (no es tan simple como cambiar sin más la codificación en PHPMyAdmin) o bien dejar latin1 como codificación y cambiar sí la collation de los campos a latin1_spanish_ci, y modificar, si fuera necesario, la codificación de los archivos html y php, además de informar al servidor de en qué codificación le envías la información y cómo la quieres de vuelta.
Sé prudente con lo que ya tienes y en general te funciona. Si has estado usando latin1 y no has necesitado utf8, podrías dejarlo así y para el futuro y nuevas bases pensar en el cambio.
En todo caso, antes haz pruebas con una versión copiada de tu base y verás el resultado. "Estos experimentos mejor con gaseosa".
Suerte.

Última edición por jurena; 25/03/2009 a las 15:01
  #11 (permalink)  
Antiguo 25/03/2009, 15:15
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: MySQL - como no discernir caracteres con acentos

cierto cierto...
en ocaciones omito informacion, soy un poco volado....
siempre, pero absolutamente siempre debemos respaldar la informacion antes de modificar cualquier configuracion, y como dide jurena, no es llegar y "cambiar un parametro para probar si funciona".... recuerda el charset no es y no esta en una sola instancia, debemos fijarnos en
Servidor, Cliente e interprete ademas del medio de transporte.... en ocaciones por falla de uno generamos un caos.... y es mas simple que eso..... ejjee
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #12 (permalink)  
Antiguo 25/03/2009, 15:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

obviamente todo con respaldos...de hecho estoy trabajando en una replica del servidor.

pero estoy tremendamente confundido con :

1) que codificacion usa la base de datos que estoy usando (el dump me dice que utf-8, asi como las collations, sin embargo el browser en utf-8 me muestra cosas como "Muere diplomático estadounidense víctima" en el phpmyadmin, no asi en la consola)

2) que codificacion usa la aplicacion final, le mando headers al browser de que es utf-8, asi mismo el browser reconoce como utf-8 los datos. Y la info se despliega bien en la aplicacion.
  #13 (permalink)  
Antiguo 25/03/2009, 15:25
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: MySQL - como no discernir caracteres con acentos

entiendo que estas con php, intenta con la siguiente instruccion cuando instancies tu clase de Mysql
$this->query( "SET NAMES 'utf8'", $this->connection );

o por consola

SET NAMES 'utf8';
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #14 (permalink)  
Antiguo 25/03/2009, 15:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

lo puse en la consola (tb en php). Antes en consola me aparecen las letras con acentos, luego de esa instruccion, en la consola me aparece todo como en el phpMyAdmin (o sea, letras raras en vez de acentos)...

¿luego la base esta en latin1?
  #15 (permalink)  
Antiguo 25/03/2009, 16:17
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: MySQL - como no discernir caracteres con acentos

si la consola mostraba la informacion con acentos entonces el problema podria ser del webserver, no de ma bdd.
seria entonces : Reinicia el BDDServer. Desde php SET NAMES 'utf8'.

no seria mala idea revisar los parametros del WEBServer (tambien puede ocacionar problemas).
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #16 (permalink)  
Antiguo 26/03/2009, 08:59
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

Hasta donde yo se el servidor sirve en utf8, ¿donde puedo ver eso?

-nota : comprobado, hice muchas cosas y estoy casi seguro qu ela base esta en utf-8 (hice dumps, las comprobe con file, tambien revise los largos de las cadenas y 'águila' tiene largo 7, contra 6 de 'aguila', etc.)

Última edición por Leprosy; 26/03/2009 a las 09:29
  #17 (permalink)  
Antiguo 11/06/2009, 17:34
 
Fecha de Ingreso: abril-2009
Mensajes: 104
Antigüedad: 15 años
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

alguein sabe alguna instruccion para cambiar la codificacion a toda la base de datos, la mia de momento es solo de prueba, gracias
  #18 (permalink)  
Antiguo 11/06/2009, 17:36
 
Fecha de Ingreso: abril-2009
Mensajes: 104
Antigüedad: 15 años
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

haaaa y como funciona esto, alguien me puede explicar porfa?


esto que cito omar 1977:

entiendo que estas con php, intenta con la siguiente instruccion cuando instancies tu clase de Mysql
$this->query( "SET NAMES 'utf8'", $this->connection );

o por consola

SET NAMES 'utf8';

Última edición por angelosss; 11/06/2009 a las 17:38 Razón: falto el nombre de quien escribio lo que cito
  #19 (permalink)  
Antiguo 11/06/2009, 23:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: MySQL - como no discernir caracteres con acentos

angelosss,
Eso hace entender al servidor que le envías en codificación utf8, que la conexión la haga con utf8 y que los datos los devuelva utf8.
SET character_set_client = x;
SET character_set_connection = x;
SET character_set_results = x;

mira aquí
http://dev.mysql.com/doc/refman/5.0/...onnection.html

Pero en una página web, por lo que se refiere a la codificación, interviene algo más que la base de datos y el servidor. La codificación también depende de la codificación de los archivos html y php, y de lo que hace el navegador...
  #20 (permalink)  
Antiguo 12/06/2009, 04:47
 
Fecha de Ingreso: abril-2009
Mensajes: 104
Antigüedad: 15 años
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

gracias lo mirare
  #21 (permalink)  
Antiguo 12/06/2009, 04:49
 
Fecha de Ingreso: abril-2009
Mensajes: 104
Antigüedad: 15 años
Puntos: 0
Respuesta: MySQL - como no discernir caracteres con acentos

lo he mirado y lo siento soy un poco cazurro y no lo he entendido, si alguien me puede dar un ejemplo mas practico, gracias, los siento por no entenderlo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:05.