Cita:
Iniciado por manuparquegiralda
A ver tengo un problema. El tema es el siguiente, me gusta usar la codificación utf-8, probablemente un poco sugestionado por haber escuchado siempre que es la mejor.
Depende para qué, en qué dioma trabajes y cual sea el objetivo. Como siempre se dice, "mejor" es un concepto inexistente en informática. Puede ser "adecuado", "conveniente", etc. Pero no "mejor". Lo "mejor" requiere definir el contexto.
Cita:
Iniciado por manuparquegiralda
El problema lo tengo cuando quiero hacer búsquedas en la BD. Imaginemos que rellena el formulario un tal José y su nombre se guarda en la base de datos que tengo codificada en utf-8_general_ci de esta manera José.
Si te sucede eso es que tienes un error entre el ingreso y el envío a la base, porque en UTF8 debería haberse guardado como "José". Es decir, hay un error en alguna de estas partes:
- Codificación del formulario.
- Codificación de la conexión a MySQL.
- Codificación al crear la query de inserción.
El 99% de las veces son errores de programación en algún paso, donde el dato se corrompe.
Cita:
Iniciado por manuparquegiralda
Ahora supongamos que otro usuario que también se llama José, quiere registrarse, pero se equivoca y se le olvida poner la tilde y escribe Jose. Yo no quiero que el nombre se pueda repetir, así que antes busco si el nombre que escribió el usuario se encuentra en la base de datos. Y el problema me viene en que para MySQL José no es lo mismo que Jose. Y tiene lógica, puesto que cuando guarda el primero escribe José por lo tanto no es lo mismo que cuando viene con los caracteres latinos.
La codificación UTF8, lo mismo que en otros casos, considera iguales semánticamente la "e" y la "é". Precisamente por necesidades de la logica de consultas. Para eso están precisamente las collation, que te conviene tratar de estudiar para dominar, a fin de no enredarte con el tema.
Cita:
Iniciado por manuparquegiralda
La única solución que se me ocurre a mi es codificar los datos a Latín1 en php antes de guardarlos y poner las bases de datos en latin1_spanish_ci, de esta manera se me guardará con la tilde y el case insentive me dira que lo busque con tilde o sin tilde o en mayúsculas el nombre ya existe. Pero eso me supone un trabajo enorme al tener que andar codificando y decodificando cada dato que guardo y extraigo de la base de datos.
Trasladarías el problema a una collation nueva, pero no dejaría de existir. Que la base sea de charset por default Latin1 no resolverá el problema del formulario
Cita:
Iniciado por manuparquegiralda
Podría pasar toda la página a latin1, pero me encuetro con el problema de que uso principalmente AJAX y de nuevo tengo que andar codificando y decodificando en este caso todo lo que me envía AJAX, ya que sus respuestas son siempre en UTF-8.
Precisamente. Pasar la collation a otra no resuelve nada. Sólo
agrega un problema nuevo.
Cita:
Iniciado por manuparquegiralda
En fin un puto rollazo este de los caracteres que no me deja de hacer comerme la cabeza siempre. Alguien sabe como solucionar lo de las búsquedas en MySQL haciéndose insensible a las tildes y estando codificada en utf-8
Gracias familia
En definitiva, el problema que tienes se resuelve depurando principalmente la aplicación, no la base. Si tienes la base en UTF8 y tienes problemas de caracteres, no le cargues la culpa a la base. La base sólo almacena lo que recibe, y si recibe mal el dato... lo guardará mal.
Aunque no lo creas y me insistas que la aplicación anda bien, desde ya te digo que no es así. Esto lo hemos discutido muchas veces con otros foristas que insistían en que tenían todo OK, y luego de un profundo rastreo, siempre se encontraron "agujeros" por los cuales el UTF8 estaba pasando corrupto, mal administrado. Y en todos los casos la solución fue corregir algo de la aplicación (principalmente el charset de la conexión).