Problema con MySQL 4.1 phpMyAdmin y utf-8

El caso es que estaba creando una apliación y decidí siguiendo ésta recomendación utilizar como codificación UTF8.

Todo me iba de maravilla en mi servidor local (MySQL 3.xx). Al subirlo al Hosting me encuetro que tienen instalada la versión 4.1.3 y veo que hay algunos cambios (Collation, …) le indico como collation utf-8_spanish_ci y mediante el phpMyAdmin importo todas las tablas y el contenido, que previamente había exportado desde mi servidor local.

Al acceder al contenido desde el phpMyAdmin veo que los registros que tienen algún caracter no-ASCII (ñáéíóú…) no se ven correctamente.

Vista desde phpMyAdmin
Y al insertar registros no-ASCII desde el phpMyAdmin no se ven correcatmente en la aplicación web.

Vista desde Aplicación Web

El caso es que tenía todo en utf8, servidor web, MySQL, phpMyAdmin, en el HTML, … y no había manera de que funcionara correctamente.

La solución era tan simple como ésta:

Después de hacer la conexión y seleccionar la BD

$enlace= @mysql_connect($host,$user,$pass)
@mysql_select_db($db_name,$enlace) or die(mysql_error());
Añadir la siguiente línea

@mysql_query(«SET NAMES ‘utf8′»);
Y ya está todo solucionado

Después de revisar todos lo Foros habidos y por haber, postear el problema en los Foros de phpMyAdmin y no encontar respuesta, la solución me la enviaron por correo una persona que había visto mi pregunta en algún sitio.

Espero que a alguien le sea de utilidad, a mí ésta chorrada me ha vuelto loco durante unas cuantas semanas.

Actualización: Si quieres pasarte a UTF8 te recomiendo éste Post lo explica todo clarito, clarito.

Esta entrada fue publicada en Software Libre, Trucos. Guarda el enlace permanente.

100 respuestas a Problema con MySQL 4.1 phpMyAdmin y utf-8

  1. Miguel dijo:

    A mi me va a venir de perlas, porque después de ver el post de Diego, creo que yo también me voy a animar! 🙂

  2. Diz dijo:

    Yay! Me has ahorrado buenos dolores de cabeza! Ya pensé que tedría que resignarme a ISO-8859-1.

    Bendito el día en el que todo funcione con UTF-8 por defecto.

  3. trukulo dijo:

    El problema está en la bbdd exportada, la solución sin necesida de código en mysql pasa por:

    iconv -f iso8859-1 -t utf8 $fichero > utf8/$fichero

    Los que usen windows… ummm, bueno, que se pasen a un sistema operativo xD

  4. alex dijo:

    Joder! menos mal porque yo también andaba ‘quemado’ con el tema del collation.

    Gracias!

  5. David dijo:

    Trukulo dices:

    El problema está en la bbdd exportada, la solución sin necesida de código en mysql pasa por:

    iconv -f iso8859-1 -t utf8 $fichero > utf8/$fichero

    Los que usen windows… ummm, bueno, que se pasen a un sistema operativo xD

    Lo he probado de esta manera y tampoco funciona, le tengo que añadir @mysql_query(«SET NAMES ‘utf8′»);

  6. Raspu dijo:

    Hola David que tal!

    Me gustaría hacerte una consulta respecto al tema del UTF-8.

    En el caso de tu blog, si en las herramientas del navegador (Ópera) defino como codificacion iso-8859-1 los caracteres no ASCII se ven con símbolos raros.

    En el caso del blog de Jorge Martínez (que está como UTF-8 igual que el tuyo) siempre se ve bien independiente d ela codificación que yo defina en el navegador.

    ¿Por qué esa diferencia si por lo que he leído de ambos siguieron los mismos caminos para pasar su blog a UTF-8?

  7. David dijo:

    Muy buena tu observación.

    La verdad es que no tengo la más remota idea, he estado mirando en otros sitios que también están en UTF-8 como Mini-d y Microsiervos y si cambias la codificación en el Navegador si se ve con caracteres raros.

    Le dejaría un mensaje a Jorge Martínez pero tiene restringidos los comentarios a Usuarios.

    Si alguién lo sabe.

  8. MiTH dijo:

    La cuestión de porque unas webs con utf-8 se ven bien y otras mal es por las cabeceras de la página.
    En la cabecera de la página web se ha de definir en que codifiación se sirve la web, en este caso utf-8, si no se define esto el navegador usará la codificación que hayamos puesto por defecto que será iso-8859-1 y no podremos ver bien los caracteres.
    Una simple linea en la cabecera como esta lo solucionaría en teoría:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  9. David dijo:

    MiTH a lo que se refiere Raspu es cuando tu le cambias la definición al navegador de forma manual, por supuesto que hay que definir en el HTML que la página está servida en UTF-8 para que lo coja de manera automática.

  10. David dijo:

    pos yo tenia el mismo problema pasando de una version 4.1 a un servidor con 3.23 y lo solucione con ambas lineas la del

    @mysql_query(«SET NAMES ‘utf8′»);

    y la parte del utf-8 en el html

    muchas gracias

  11. yacatl dijo:

    Tengo un problema con los charsets. Ojalá alguien pueda decirme como cambiarle el charset por defecto a MySQL, ya que lo he instalado con aptitude y todavia esta en latin1_swedish_ci .

    Quisiera mudarme a utf8 e hice lo de darle con el iconv al dump, al montarlo los datos se guardan de manera correcta, pero al verlos desde el Web ya sea con phpMyAdmin o con alguna otra aplicacion creada, los datos presentan caracteres extraños, aun asi que he puesto en cada archivo html UTF-8 en lugar de ISO, y en el archivo de conexion a la BD he puesto la linea comentada en el articulo.

    ¿Hay alguna manera de saber cual es el charset tanto del servidor como del cliente de mysql y hacer que ambos, mas el archivo html esten en UTF-8?

    Saludos!

  12. argie01 dijo:

    Lo que no entiendo del post de Toro es porque cabmió la codificación de sus ficheros .php
    Pensaba que con cambiar la codificación de la bbdd era suficiente.

    En mi caso, estoy teniendo problemas con utf-8, y no sé como actuar, dado que yo me bajo un backup de la bbdd que supongo no está en utf-8. Luego lo edito y copio/pego todo en phpmyadmin, y lo ejecuto.
    Se supone que si la bbdd está definida como utf-8 es suficiente, o debería restaurar desde un fichero utf-8, en vez de copiar y pegar ?

    gracias y saludos,

    Argie

  13. Alex dijo:

    joer tio pues tienes toda la puta razon, la movida debe ser una incompatibilidad de charsets con el mysql 4.x
    lo he leido mas de una vez, y más de una vez me he vuelto loco!
    se supone que al configurar bien tu mysql para que te haga colaciones utf-8 deberia estar…pssss
    todo igual que siempre…! una merda

  14. alejo dijo:

    Muchas gracias por el consejo, muy útil

  15. Agustin dijo:

    Muchas Gracias!!.. me salto este problema, busque en google y la primer pagina que me salto fue la tuya!…funciono perfectamente!

  16. andres dijo:

    Hola:

    por favor que alguien me ayude… nose donde agregar estas lineas que plantean como solucion:

    Después de hacer la conexión y seleccionar la BD

    $enlace= @mysql_connect($host,$user,$pass)
    @mysql_select_db($db_name,$enlace) or die(mysql_error());
    Añadir la siguiente línea

    @mysql_query(«SET NAMES ‘utf8′»);
    Y ya está todo solucionado

  17. boris dijo:

    yo tuve el problema de los caracteres extraños con php y lo solucioné con la función utf8_decode en el string que presenta problemas ( Nota: en la BD el string estaba como corresponde )..espero les sirva..

    Saludos…

  18. Joel dijo:

    gracias gracias gracias!

    yo también llevaba semanas con el mismo problema, idéntico al que se plantea en el post. con la linea

    @mysql_query("SET NAMES 'utf8'");

    se solucionó todo.

    por si sirve a alquien, tengo windows y tengo todo en utf8 (la bd, el apache para que por defecto sirva en utf8 y todos los ficheros php/html tambien en utf8)

  19. carlos dijo:

    Mil gracias.
    Pero mil gracias de verdad, llevo 3 horas sin encontrarle solucion y por fin la tengo.

  20. desh dijo:

    Esto no vale siempre..
    Por ejemplo, si no podemos cambiar la codificación de la BDD (por defecto en latin1), pues tenemos contratado un Servidor Virtual.
    Si voy al phpMyAdmin no hay dios que pueda cambiar la codif. pues mySQL 3.23 (el estándar de los Servidores) parece que no acepta UTF8 o los collates o no sé qué.
    Por lo tanto, esta solución parece que funciona sólo si «tenemos todo en UTF8», que no siempre es facil o posible..

  21. aquiles dijo:

    muchas gracias!, funcionó de perilla 😀

  22. Ramon Olmedo dijo:

    tengo un problema :
    de una version de mysql en un servicio de hosting en donde todo funcionaba bien, el tema es lo de las listas desplegables para guardar el Id seleccionando la descripcion pase a otra version en otro servidor de hosting mysql 4.1 y no funciona, me podrian ayudar gracias

  23. Ramon Olmedo dijo:

    tengo un problema :
    de una version de mysql en un servicio de hosting en donde todo funcionaba bien, el tema es lo de las listas desplegables para guardar el Id seleccionando la descripcion pase a otra version en otro servidor de hosting mysql 4.1 y no funciona, me podrian ayudar gracias

  24. Montol dijo:

    ¡Mil Gracias! Yo tambien me he tirado mi tiempo buscando la solución y con esta me vale…
    Yo tengo una MySQL en la que tengo idiomas (caracteres) tan dispares como ruso, chino y árabe, y por mas que intentaba mis páginas web siempre daban fallos.
    Por si a alguien le sirve, me acostumbre a convertir todos los archivos .sql a codificacion UTF8 antes de subirlos al phpMyAdmin con un editor como el UltraEdit.
    Un saludo

  25. Mil gracias de verdad desde mexico, llevaba 2 dias enteros tratando de mostrar caracteres ( o como se diga) japoneses y esta fue la solucion esta de pelos!!
    Mil gracias.

  26. Hola sabes agrege el codigo que das a conocer:

    pero este me da como resultado esto
    Parse error: syntax error, unexpected T_STRING in /home/mvallem/public_html/utf.php on line 10
    alguna idea de que pueda ser ?

  27. David dijo:

    Te falta poner punto y coma (;) al final de la linea número 9.
    Pero eso de primaria de PHP.

  28. finepointer dijo:

    Muchas gracias por esta info!! Me ha salvado!

  29. josemaria dijo:

    Gracias compañero. Harto de dar cornadas estaba hasta que he recurrido a Google y me ha enviado aquí 😉

  30. Mil gracias por el post. Como a tanta gente igual aquí me ha salvado de muchas horas de búsqueda. Un saludo a todos.

  31. silvina dijo:

    hola a todos, a mi me pasa cuando importo una base de phpbb. convierte los caracteres…un horror!!!
    alguien sabe como resolverlo ??
    gracias.

  32. juanbe dijo:

    Muy bueno lo del….
    @mysql_query(«SET NAMES ‘utf8′»);
    Ya estaba podrido de pelear con esos temas… un abrazo inmenso.
    Y de nuevo gracias…..

  33. Pere Picornell dijo:

    después de migrar todo un sistema a utf-8, me he encontrado con que los datos que sacaba de la base de datos solo se mostraban bien si hacia «utf8_encode()», tu artículo me ha venido de perlas 🙂

  34. Daniel Zapata dijo:

    Muchisimas gracias … estaba en la misma situación que tú y de verdad que ya no sabía que hacer. Ya tenía todo migradoa utf-8 pero igual tenia problemas visualizando los caracteres y de verdad que tenias varios dias dando vueltas con eso.
    Muchas gracias : )

  35. naia dijo:

    Hola, tengo un problema con MYSQL y me preguntaba si me podríais ayudar. La cuestión es que al realizar consultas con palabras con ñ ó n me da la misma solución, es decir, toma igual las n y las ñ.
    En el servidor donde está instalado se usa la codificación utf8…

  36. dario dijo:

    muchas gracias, me sirvio muchisimo el @mysql_query(«SET NAMES ‘utf8′»); que DIOS te lo pague.

  37. Eugenio dijo:

    Me solucionaste un dolor de cabeza. Muchas gracias viejo!!!

  38. Sersinser dijo:

    A otro que le salvas de las garras de este problema. Muchas gracias, ahora podré continuar con la web.

  39. Nicolas dijo:

    Sos un grosoooooooooo, increible como solo con esa linea funciona todo ok…
    Saludos y muchisimas gracias….

  40. Aitortxu dijo:

    Me sumo a los agradecimientos… ya no sabía por donde tirar…
    Saludos

  41. fania dijo:

    que bien porfin encontre la solución

  42. Sambrista dijo:

    ¡Muchas gracias! Me estaba empezando a volver loco con las codificaciones.

  43. Miguel dijo:

    Uffff….. no sabes como te agradezco este post!!! llevo dias buscando la solución y por fin la encuentro. Que grande es esto del internete 😉
    PD: me funciona perfectamente con la inclusión de esta línea en el código!!

  44. netstat32 dijo:

    hola, te agradezco la ayuda, ya tenia dias tratando este problema, pero con la linea anexada funciono perfectamente mi consulta, excelente aporte gracias.

  45. Montol dijo:

    Alguien sabe si el IIS soporta utf-8? porque he tenido que migrar del php al asp y ahora no encuentro el equivalente al
    @mysql_query("SET NAMES 'utf8'");
    en asp, ya que los recordsets se crean antes de definir la codificacion en el head…

  46. Ganriela dijo:

    Hola,
    Tengo una web donde tengo que mostrar data en diferentes idiomas. Estuve usando el ISO-8859-1. Todo va bien excepto con el búlgaro, ruso y Ucraniano.
    Cuando le pongo UTF-8 malogra todo lo que estaba mostrando bien y tampoco muestra el búlgaro como debe ser.
    Qué estoy haciendo mal?

  47. johana dijo:

    buenas como estas la presente es que cuando recargo mysql /etc/init.d/mysql restart me aparece un error que es «checking for corrupt, not cleany closed and upgrade needing tables»al recargargo si me podrian ayudar seria de mucha gran ayda
    att: elizabet johana

  48. johana dijo:

    buenas como estas la presente es que cuando recargo mysql /etc/init.d/mysql restart me aparece un error que es «checking for corrupt, not cleany closed and upgrade needing tables»al recargargo si me podrian ayudar seria de mucha gran ayuda
    att: elizabet johana

  49. Ricardo dijo:

    Gracias por este magnifico post..

  50. morfeo dijo:

    AL FIN!!!!
    MUCHISISISIMAS GRACIAS!!

  51. tttony dijo:

    DIOOOOOSSSS!!!! GRACIAS A DIOOOOSSS (BUENO GOOGLE xD!!! ENCONTRE ESTA PAGINA PORQUE ME ESTABA MATANDO PARA SOLUCIONAR EL MALDITO PROBLEMA ESE DE LOS CHARSET DE MYSQL+PHP+HTML
    GRACIAS DE NUEVO…

  52. joel dijo:

    tío eres el puto amo.
    llevo como 15 horas provando con utf y mierdas!!!
    @mysql_query(«SET NAMES ‘utf8′»);
    es la clave!!!
    un abrazo,
    joel

  53. arcano dijo:

    Muchas gracias. Me funciona perfectamente. Tengo todo en utf-8, pero con php al tomar los datos de mysql la codificación era errónea. Con añadir mysql_query(«SET NAMES ‘utf8′»); queda solucionado. PHP/MYSQL codificación

  54. Gustav dijo:

    Sos grande man, mil gracias…

  55. robertereter dijo:

    Campeonííííño jejejeje.
    Por fin leññññes

  56. tonio dijo:

    Hey, una solución acertada. gracias mil

  57. Jaume Sala dijo:

    Gracias Gracias Gracias.
    Yo también llevaba días con el tema.

  58. Adrián dijo:

    Pues yo sigo peleándome con el asunto.
    a)Todo va bien cuando lo hago desde el php. En el phpmyadmin se ven mal los caracteres pero me da igual.
    b) Pero claro! Hice una exportación del phpmyadmin de ciertos datos (bastantes) y cuando los importo de nuevo a la base de datos se ven bien en el phpmyadmin pero mal en la web!!!!!
    c)Estoy cambiando cosas en el my.ini y aunque estoy aprendiendo un montón sigo sin poder hacer la exportación a la base de datos con los caracteres como dios manda.
    – Está todo bien. fichero .sql en utf-8, cabeceras utf-8 (firefox utf-8)…
    ¿Cómo puede exportar de nuevo los datos y que me guarde todo en utf8 como ya me hace el php? Si no lo consigo no puedo visualizar correctamente los datos a no ser que recurra al utf8_encode de marras.
    Que se os ocurre?

  59. Wess dijo:

    Muchas gracias, estaba teniendo serios problemas con este tema y no sabia como solucionarlo… si pudiera darte un 10, te lo daria!

  60. Alex dijo:

    joder, GRACIAS!!

  61. shawn dijo:

    pues a mi no me sirvio la línea esa, sin embargo usé el utf8_decode($string);

  62. Insane dijo:

    Muchas gracias. Me ha venido de perlas.

  63. relaxante dijo:

    me salvaste la vida… jajaja ya estaba pensando armar una consulta que cambiara todos mis caracteres acentuados y especiales por su correspondiente en utf-8..
    te lo agradescoooo

  64. David dijo:

    Dioses de Kobol… esa línea ha sido mi salvación.
    Muchas gracias!

  65. puczautos dijo:

    Muchas gracias!!!!! eres mi salvación

  66. Me acabas de salvar la vida!!!!!!

  67. Nacho dijo:

    Muchas gracias por compartir esta informacion que me fue muy util ya que no encontraba como solucionarlo. Nuevamente un millon de gracias!

  68. Carlos Vazquez dijo:

    Pues al igual que muchos, me has ahorrado un dolor de cabeza que me empezaba a dar. Ciertamente sólo aquí encontré la solución después de buscar en varios sitios. Mil gracias.

  69. Genial, me he pasado horas tratando de resolver el problema y solo me faltaba esa linea en la conexion. Gracias!

  70. belen dijo:

    me salvaste que dolor de cabeza, muy buena la solución, gracias ah! Esa línea ha sido mi salvación!!!

  71. -KaiK- dijo:

    MIL GRACIAS!!!!!!
    No sabes la de tiempo que llevaba peleándome con PHP y MySQL al cambiar el servidor e instalar las versiones más nuevas de ámbos…

  72. aldo mariano dijo:

    Ídolo, que te puedo decir. Muchísimas gracias…!!!
    No te das una idea la bronca que me generaba no encontrar la solución.

  73. German Díaz dijo:

    Que buena solución, hasta el momento lo hacía editando el php para cambiar los caracteres acentuados o trabajando todo en iso…
    Gracias por compartir esa línea que nos ahorra tiempo

  74. Erwin dijo:

    Gracias por este tip. Me funciono de maravilla…. Mi pagina web trabaja de forma multilanguages. 🙂
    Gracias

  75. RhapsodyOfFire dijo:

    Pero que sucede si yo quiero realizar un search que busque la palabra Ñandú, no la va entontrar por que en la base de datos esta escrito Ñandú.
    Pero que pasa si yo quiero que en mi formulario entren 5 caracteres y si ingreso Ñandú que tiene 5 caracteres en la base de datos lo va cortar porque Ñandú tiene 7.
    ¿Como hace wordpress para insetar bien los acentos y eñes en la base de datos?

  76. Rubén dijo:

    Gracias tio; gracias de corazón.

  77. Oscar Eduardo Rios Lòpez dijo:

    Uffff Excelente aporte para los que estamos empezando. Gracias!!

  78. orlando dijo:

    muchisimas gracias !, con lo de SET NAMES solucione el problema, tenia todo ya configurado en UTF-8 solo el mysql faltaba y no sabia como hacerlo, gracias de veras.

  79. sofia dijo:

    mil gracias hace mucho que buscaba una solucion asi y vi de todo pero esto funciona perfecto

  80. Chuso dijo:

    Dios, gracias.
    Pena que no haya venido aquí hace tres horas 😉

  81. ALEX SMV dijo:

    MUY BUEN APORTE … ME SOLUCIONO EL PROBLEMA MUCHAS GRACIAS DESDE PERU LIMA

  82. buy levitra dijo:

    La resolución de un problema mediante un ordenador consiste en el proceso que a partir de la descripción de un problema, expresado habitualmente en lenguaje natural y en términos propios del dominio del problema, permite desarrollar un programa que resuelva dicho problema.
    Este proceso exige los siguientes pasos:
    * Análisis del problema.
    * Diseño o desarrollo de un algoritmo.
    * Transformación del algoritmo en un programa (codificación).
    * Ejecución y validación del programa.
    Los dos primeros pasos son los más difíciles del proceso. Una vez analizado el problema y obtenido un algoritmo que lo resuelva, su transformación a un programa de ordenador es una tarea de mera traducción al lenguaje de programación deseado.

  83. loopard dijo:

    este post me salvó la vida, o x lo menos! un montón de tiempo…
    MUCHAS gracias!! muchas!

  84. Sebaskhi dijo:

    La verdad no acostumbro a escribir para dar las gracias pero esto lo amerita, muchas gracias ya eran 2 semanas con este «problemita». gracis de nuevo

  85. ErTomy dijo:

    me acabas de solucionar un marrón de narices. Gracias

  86. Santiago dijo:

    Loco, no sabés de la q me acabas d salvar.. Caí de rebote en este sitio, después de haber probado con montones de funciones, predeterminadas y otras tantas hechas por mi.. Un millón de gracias, de verdad

  87. Androtx dijo:

    Compadre muchas gracias he estado muchos días con ese problema

  88. Dmont dijo:

    Gracias!!!

    En verdad que este tip si es de los buenos.
    Fixed!!!

  89. nery dijo:

    la verdad has ayudado a un monton a mi tambien me vino de perlas
    Muchas gracias

  90. jesus dijo:

    Muchas gracias!!!

    Me ha venido de lujo… ya me estaba empezando a doler la cabeza!!!!

    Un saludo.

  91. Hernan dijo:

    Muy buenoooo! Gracias TOTALES!

  92. l3.d dijo:

    Gracias crack, ya me estaba rallando yo que codificacion poner en phpmyadmin, sabia el «truquito» de la llamada a la BD pero luego no sabia cual habia que poner en la creacion de las tablas.

  93. Marcelo dijo:

    Me solucionaste un gran problema que se me había generado al diseñar mi primer sitio web en ruso.

    Entre tu aclaración de agregar una línea en el código del query de php y la claración de MiTH de colocar una línea en la cabecera del html me resolvieron un gran problema.

    Muchas gracias !!

  94. KENEL dijo:

    gRACIAS AMIGO, TU AYUDA FUE MUY GRANDE PARA MI,
    SOLO QUIERO ACOTAR UNA COSA, CUANDO TRATE DE PONER LO K ME DIJISTE NO ME FUNCIONABA, ESTO ERA PORK LOS DATOS YA ESTABAN MAL EN LA BASE DE DATOS, NO ERA UN PROBLEMA DE LA PRESENTACION EN PDF K YO INTENTABA HACER, SINO EL PROBLEMA ESTABA EN LA PAGINA PHP K SERVIA PARA GUARDAR,

    EL PROBLEMA ESTA EN EL MOMENTO DE GUARDADO NO EN LA CONSULTA A PRESENTAR, ES AHI DONDE SE DEBE PEGAR EL CODIGO

  95. Lucas dijo:

    Gracias !! 3 dias buscando la solucion !! Gracias !!

  96. Robertereter dijo:

    Ya queda menos para que este problema se haga mayor de edad ;D

Replica a Eugenio Cancelar la respuesta