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:
Nombre | Edad |
Mânolö | 20 |
Manolo | 40 |
Pepe | 10 |
Si hago:
Código:
SELECT * FROM `table1` WHERE (Mânolö LIKE `Nombre`);
me debería devolver unicamente:
Nombre | Edad |
Mânolö | 20 |
Sin embargo, me devuelve esto:
Nombre | Edad |
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