elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  [MySQL] Problema con Unicode (UTF-8)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [MySQL] Problema con Unicode (UTF-8)  (Leído 4,304 veces)
nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
[MySQL] Problema con Unicode (UTF-8)
« en: 11 Octubre 2011, 22:29 pm »

Hola. Vereis, tengo una base de datos local MySQL. La tengo codificada en UTF-8, y para acceder a ella utilizo Java, el cual tambien lo tengo configurado para que utilice UTF-8. Utilizo InnoDB.

En principio me escribe y recupera datos de la base de datos correctamente, incluso escribe los carácteres especiales. El problema es que a la hora de comparar detecta algunos carácteres que no son como iguales, normalmente los carácteres con tildes. Por ejemplo, si tengo esta tabla llamada table1:

NombreEdad
Mânolö
20
Manolo
40
Pepe
10

Si hago:

Código:
SELECT * FROM `table1` WHERE (Mânolö LIKE `Nombre`);

me debería devolver unicamente:

NombreEdad
Mânolö
20

Sin embargo, me devuelve esto:

NombreEdad
Mânolö
20
Manolo
40


En resumen, a la hora de comparar (por ejemplo con un SELECT) toma por igual carácteres diferentes, por ejemplo a,á,à,â,ä los toma por iguales.

Bueno el problema no son las consultas, sino insertar nuevos datos, ya que si inserto dos filas con clave primaria diferente en esos carácteres me la detecta como duplicado.

Por ejemplo, imaginemos que en la primera tabla la columna Nombre es la clave primaria. Para insertar una nueva fila Pepê, 80 sería así:

Código:
INSERT INTO `table1` (`Nombre`, `Edad`) VALUES ('Pepê', 80);

Sin embargo me devuelve un error:

Código:
ERROR 1062: Duplicate entry 'Pepê' for key 'PRIMARY'

Evidentemente no debería dar este error, ya que la nueva clave primaria es Pepê y la ya existente es Pepe.


Buscando por google, encontré que podría ser había que describir el COLLATE de las tablas como utf8_general_ci, utf8_unicode_ci o utf8_bin entre otros muchos. Buscando más información comentaba que las comparaciones se hacían diferentes segundo el COLLATE y hablaba de los acentos, por lo que creía que era esto, establecí todas las tablas y el esquema principal como utf8_bin, que es la comparación binaria, pero me sigue dando el mismo error.


Bueno dicho esto todo ¿alguien tiene alguna idea como solucionar mi problema?

Saludos ;)


« Última modificación: 12 Octubre 2011, 02:35 am por nhaalclkiemr » En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: [MySQL] Problema con Unicode (UTF-8)
« Respuesta #1 en: 13 Octubre 2011, 10:49 am »

Al final tras mucho probar y buscar encontré la solución:

Como creía, el COLLATE es el que define como se tratarán los carácteres. Mi codificación estaba en UTF8, y el problema es que solo encontraba COLLATES Case Insensitive (por ejemplo utf8_general_ci o utf8_unicode_ci); ese ci del final significa case insensitive, y utf8 para MySQL no tiene COLLATES case sensitive. La única solución es usar utf8_bin que utiliza comparación binaria (según el valor binario del carácter).

Yo ya había probado a establecer el COLLATE por defecto de mi server MySQL, el COLLATE de mi BD y de mis tablas a utf8_bin; y me seguía sin funcionar. Al parecer hay que establecer en cada columna de cada tabla (la cual sea VARCHAR claro) el COLLATE a utf8_bin.

Esto me funcionó, pero me dió problemas en el script, ya que no me daba error si quería establecer manualmente el COLLATE de alguna clave foránea (o que tuviera referencias en otras tablas a esa clave), y esto ocurre aun no se ahora porque, pero me ocurría aunque en todas las claves foraneas que se referenciaban unas a otras estubieran establecidas igual.

Pues bueno, al final lo que hice fue primero crear las tablas estableciendo solamente las claves primarias y el COLLATE. Y una vez creadas, mediante ALTER TABLE crear las claves foráneas. Y así al final me funcionó.

Saludos ;)


En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
djdm52

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: [MySQL] Problema con Unicode (UTF-8)
« Respuesta #2 en: 16 Noviembre 2011, 03:06 am »

Oye amigo tengo un problema parecido con mi bd, cuando ingreso los registros en la bd se muestran con problemas los acentos y la ñ, pero cuando los importo desde otra bd igual se muestran bien, ¿que crees que sea? ya he intentado de todo con la condenadas Collationes.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
El bug del UNICODE
Tutoriales - Documentación
el-brujo 2 16,326 Último mensaje 21 Febrero 2004, 02:39 am
por Crackptus^^
Unicode C++
Programación C/C++
Monica_Barcelona 3 3,938 Último mensaje 19 Mayo 2010, 21:01 pm
por Eternal Idol
[Problema] AJAX y caracter unicode nulo
Desarrollo Web
Sancho.Mazorka 0 2,642 Último mensaje 9 Febrero 2011, 19:06 pm
por Sancho.Mazorka
UTF-8 a Unicode
.NET (C#, VB.NET, ASP)
TheKillerWantsYou 0 1,896 Último mensaje 21 Junio 2011, 19:12 pm
por TheKillerWantsYou
Problema con unicode ansi utf wide characters...
Programación C/C++
patilanz 0 1,606 Último mensaje 22 Diciembre 2014, 14:30 pm
por patilanz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines