Conjuntos y conjuntos de caracteres MySQL: insensible a los acentos no funciona

Sé que la respuesta es muy simple, pero me estoy volviendo loco. Creo que he probado todas las soluciones disponibles. Aquí vamos…

Tengo una base de datos con charset latin1 . Sí, debería tenerlo en utf8 , pero tengo varios proyectos en ejecución, así que no quiero fastidiarlos.

El problema viene con SELECT con LIKE "%...%"

La tabla es utf8 con COLLATE utf8_general_ci. Los campos también son utf8 con colación utf8_general_ci. Mis archivos de script (php) están codificados en utf-8, y el servidor también sirve archivos en utf-8. Entonces, todo es utf-8.

Ok, como todo está cotejado con utf8_general_ci, debería ser capaz de buscar mayúsculas y minúsculas y acento insensible. Por ejemplo:

Tener providers en la mesa …

 id providerName 1 Jose 2 José 

Debería poder hacer …

 SELECT * FROM providers WHERE providerName LIKE "%jose%" 

o

 SELECT * FROM providers WHERE providerName LIKE "%josé%" 

Y tienen, en ambos casos, las dos filas devueltas. Pero, con la primera consulta, solo obtengo la fila 1; y con la segunda consulta, solo obtengo la fila dos. La búsqueda insensible a mayúsculas y minúsculas parece funcionar bien, pero no insensible a los acentos.

Así que traté de agregar COLLATE utf8_general_ci después de LIKE "%...%" . Mismo resultado.

Luego, descubrí que la conexión se había hecho en latin1 (vía PHP función mysql_client_encoding() ). Así que agregué una consulta cada vez que se hizo una conexión, lo que indica usar utf8. Utilicé SET NAMES UTF8 COLLATE utf8_general_ci Y php’s mysql_set_charset() . Cuando agrego esta configuración, la primera consulta devuelve la fila 1, pero la segunda consulta no devuelve ningún resultado. Además, todos los resultados devuelven caracteres raros (ya sabes, como à °, incluso si todo estaba configurado en utf8).

Esto me está llenando. Todo está configurado en UTF8, pero no funciona como (I) espero.

 MySQL Server 5.0.95 PHP 5.2.14 Win7 

Detener las máquinas !!

Descubrí que estaba haciendo todo bien y respondió como se esperaba. El único problema era que, incluso si la tabla, los campos, los archivos y el servidor estaban en utf8, cuando la tabla estaba poblada (en algún momento del pasado), la conexión se había realizado con latin1.

Así que volví a llenar la tabla, ahora con conexión utf8, y funcionó bien.

¡Gracias chicos!

No tengo la configuración para probar esto correctamente, pero aquí hay una posible solución . ¡Cuántos lugares para configurar UTF8! 🙂