Dos primos luchan contra la tecnología

Aprendizaje y formación en informática profesional mediante videotutoriales

MySQL – Charset y Collation

En MySQL vienen definidos unos valores por defecto para charset y para collation que en ocasiones puede darnos sorpresas al importar archivos SQL apareciendo caracteres extraños en lugar de los que esperábamos ver.

Por charset se entiende el juego de caraceteres que utiliza el servidor MySQL, mientras que por collation se entiende las reglas de comparación para ordenar alfabéticamente ese juego de caracteres.

En mi servidor se han definido por defecto utf-8 para charset y latin1_swedish_ci para el collation (los autores de MySQL son suecos).

Nosotros definiremos latin1(iso-8859-1) para el charset y latin1_spanish_ci para collation.

Editamos el archivo de configuración de MySQL que se suele llamar my.ini o my.cnf dependiendo del sistema operativo y añadimos los siguientes valores después de la sección [mysqld]:

character-set-server=latin1
collation-server=latin1_spanish_ci
default-character-set=latin1
default-collation=latin_spanish_ci

A continuación reiniciamos el servidor y así se habrán establecido los nuevos valores por defecto.

Para asegurarnos, especificamos los charsets en la configuración de PHP y Apache.

Editamos php.ini y modificamos la línea:

default_charset="iso-8859-1"

Editamos httpd.conf y modificamos la línea. Si comentamos la línea tomará el charset por defecto del navegador:

AddDefaultCharset ISO-8859-1

Si te ha gustado el artículo, no seas malo y ¡¡compartelo!! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Facebook
  • MySpace
  • TwitThis
  • Google Bookmarks
  • Meneame
  • Technorati
  • BarraPunto

Otros artículos relacionados

  • No hay otros artículos relacionados

12 Responses to “MySQL – Charset y Collation”

  1. Esto que has escrito es muy interesante, pero quisiera agregar este dato para todos aquellos que utilizan AJAX.

    AJAX envía los datos como UTF-8 y le importa poco el charset que utiliza el la página donde se lo esta ejecutando. Yo estoy haciendo unas páginas con ajax y he seteado todo como tú lo has escrito, pero aun así ajax me graba los caracteres hispánicos con símbolos extraños. He tomado algunas precauciones para saltear esta dificultad pero no es lo aconsejable.

    ¿Podrías aconsejarme que hacer para solucionar este tema de una manera más sencilla? Utilizo la librería PROTOTYPE.

    Desde ya te quedo agradecido.


  2. Ricardo F

    Yo no he tenido ese problema pero tal vez lo puedas solucionar aplicando las funciones de php utf8_encode antes de enviar y utf8_decode al recibir.
    Si no funciona, me cuentas y vemos otras alternativas.

  3. para el que tiene problemas con AJAX , yo tmbn los tuve y los solucione agregandole al encabezado que tipo de encoding estoy usando cada vez que regreso ajax en php seria

    header( “Content-type: text/html;charset=ISO-8859-1″ );


  4. Ricardo F

    Gracias Rene por tu aportación. Es cierto, me has recordado un problema que tuve hace tiempo al recibir información de una base de datos y lo solucioné cambiando el charset en la cabecera como tú dices.

  5. Yo lo solucioné de otra forma.

    Da igual como tengas configurado el charset del servidor u otras cosas. (Pero si lo pones como ISO-8859-1 ganarás mucho). Si pones el charset de la página como ISO-8859-1 tampoco tiene porque solventarte el problema, es decir, que si te lo solucionó fué de rebote (debido al tipo de configuración que tienes en tu servidor), porque no tiene ninguna base lógica.

    Lo que yo he echo es utilizar el comando “escape()” de Javascript antes de pasar los datos, o sea “escape(miFuncion());”.

    Con eso es mas que suficiente para evitar el problema de ñ”‘`ç^…

    Bueno, espero que esto os sirva.


  6. Vicent

    La solución propuesta por Rene:
    header( “Content-type: text/html;charset=ISO-8859-1? );
    me ha funcionado en parte, pero dado que el XMLHttpRequest utiliza la codificación UTF-8 para enviar datos al servidor he tenido que cambiar el charset ISO-8859-1 por el UTF-8, por lo que finalmente la transferencia de datos con Ajax funciona perfectamente en mi caso con:

    Aquí teneis un link interesante sobre el tema: http://www.volkanozcelik.com/cre8/blog/2006/03/ajax-and-charset-conversion.html


  7. Raul

    Tengo un problema similar, en una columna set con vocales acentuadas, puedo ingresar los datos correctamene desde mysql client, pero cuando trato de hacerlo a través de PHP no me lo permite.
    Lo primero que hice fue cambiar el tipo de tabla a utf8 y colocar las siguientes óredenes en el script de PHP:
    mysql_query(“SET NAMES ‘utf8′”);
    ésto ayuda para la mayoría de las búsquedas pero no cuando quier actualizar los datos en la columna del tipo set.
    Alguna sugerencia que me pueda ayudar sera apreciada. Gracias.

  8. arre arre RENE gracias por la ayuda vato….


  9. victor

    No se ustedes pero despues de horas que nada funciona esto parece dar un nuevo aire a que funcioncione y el %&% mouse no selecciona nada a las 6 am despues de 3 dias de trabajo y encontrarme con el problema del collate despues de tantas horas me estresa demasiado, soy yo o su pagina no acepta seleccion de texto

  10. Tener en cuenta que si ponemos
    AddDefaultCharset off
    en el httpd.conf ó /etc/apache2/conf.d/charset
    permitimos que se le preste atención a lo especificado en la etiqueta META que sería lo mas recomendable.

    Pensando que se puede tener en el servidor sitios en los cuales has trabajado con paginas codificadas en iso-8859-1 y otras de otros sitios en utf-8

    Salu2


  11. Alejandro

    Gracias a Rene por su solucion me ayudó con un problema con los tildes y las ñ que tenia.

    slds

  12. Aúnque el tema es charset y collation, nuevamente muchas gracias René, estuve por mas de un dia con este problema y no podía resolverlo, en un nuevo script en PHP que tengo en mi web, probé con diversas soluciones incompletas y uno a veces no tiene el tiempo sino de dar con el parche y aplicarlo de inmediato, descuidando a veces la explicación.

Leave a Reply

Spam Protection by WP-SpamFree