Sigueme en Twitter
«Anterior | Siguiente»

Como asegurarte de que MySQL trabaje con UTF8

20/02/2009

La primer cosa que hago al instalar MySQL es dejarlo listo para datos en UTF8.

En el archivo de configuración my.cnf cambiamos tanto el character-set del cliente y servidor.

[client]
default-character-set=utf8

[mysqld]
character-set-server = utf8

Después de reiniciar el servidor y conectarnos de nuevo podemos verificar que nuestra conexión este trabajando con UTF8 correctamente.

show variables like ‘character_set%’;
show variables like ‘collation%’;

Todos en UTF8, a excepción del binary

Esto hace que por defecto las conexiones trabajen con UTF8 pero también puedes cambiar la configuración de la conexión “al vuelo”, con consultas como set names, set character set, etc.

Si ya tienes el problema de haber combinado diferentes tipos de caracteres, como el latin1 de defecto, y necesitas migrar Derek Sivers escribió sus experiencias hace un par de años, que siguen siendo oro puro.


Hay 5 comentarios:

  1. 20/02/2009Javier Aroche dice:

    Por comodidad siempre agrego set names que editar la configuración de mysql (que no siempre es posible)

  2. 21/02/2009zicco dice:

    En MySQL yo he tratado de que el “character set” sea latin1 y el “collation” sea “latin1_spanish_ci”. Según yo, esto lo hago para que la base de datos me pueda hacer búsquedas de palabras con acentos y sin acentos por datos que escribe el cliente. Por ejemplo, una persona puede poner en un formulario la palabra “médico” y otra la palabra “medico (del verbo medicar)”. Según el diccionario esas palabras tienen diferentes significados… pero las personas se quieren referir a lo mismo.

    Entonces… yo que soy relativamente nuevo en MySQL, ¿estaré haciendo las cosas de forma correcta? Ya que necesito que en las búsquedas o “SELECT” médico y medico se muestren al cliente, sin importar la forma que lo hayan escrito.

    Me harían un gran favor ayudándome con comentarios en este tema.

  3. 21/02/2009Linnk dice:

    Yo me acostumbré terriblemente a escribir: mysql -u root –p –default-character-set=UTF8

    Esto porque muchas veces los servidores de mis clientes están en latin1 y ya tienen aplicaciones funcionando así. Despues en mis servidores locales me hice accesos directos con el comando: mysql -u root –password=xxxxxxxxxx –default-character-set=UTF8

    Creo que ya va siendo hora de configurar bien mis servidores. Ya ni porque es tan fácil :P

  4. 21/02/2009pablasso dice:

    @Zicco: Si necesitas ser preciso lo que te conviene es configurar la colación como utf8_bin que revisa bit por bit y diferencia entre “a” y “á”.

    Pero como mencionas que a tus clientes les importan ambos resultados te recomiendo dejarlo con el default de utf8_general_ci que no distingue entre caracteres especiales. Y solo cambies directamente en la consulta la colación cuando quieras ser preciso. Por ejemplo, buscando exactamente por “médico”, excluyendo “medico”:

    SELECT FIELD FROM TABLE WHERE FIELD LIKE _utf8'%médico%' collate utf8_bin;

    Puedes leer esto para saber algunas otras diferencias entre colaciones. (de paso agrega a tu lector de noticias ese blog, el autor es bueno)

  5. 22/02/2009Zicco dice:

    Muchas gracias por los tips.

Escribe tu comentario:

¿Escribiste código? [+]

Para hacerlo más legible puedes utilizar la etiqueta <pre>.
Ejemplo: <pre lang="php" line="1"> código </pre>
  • El atributo lang indica el lenguaje de programación.
  • El atributo line indica desde donde comienza la numeración.


  Los mas frikis pueden suscribirse a los comentarios por RSS.