Archivado en la categoría (PRiSE) por Teresa
Publicado el 27-09-2011

Recientemente hemos tenido que solucionar la problemática de tener que cambiar la codificación de un sistema a UTF8. Después de cambiar las codificaciones de archivos y plantillas, la forma de trabajar con los servidores de LDAP y entre otros, nos topamos con un problema en la base de datos MySQL que se utilizaba.

En un principio solucionamos el problema de los caracteres añadiendo la función mysql_set_charset(«utf8″,$conexion) en el código de la forma:
$connection = mysql_connect($server,$username,$password);
mysql_set_charset('utf8',$connection);
[...]

Esto nos evitaba los problemas de codificaciones erróneas, pero pensamos que una forma más elegante de hacerlo sería cambiar la configuración de la base de datos para evitar tener que modificar todos los scripts donde hubiera que conectarse con bases de datos.

Según la documentación de MySQL para que al extraer la información con una codificación concreta es necesario modificar el archivo de configuración de MySQL añadiendo las directivas:
character-set-server=utf8
collation-server=utf8_general_ci

Esta configuración nos funcionaba bien hasta que se utilizaban dos conexiones a bases de datos diferentes en un mismo script, donde una de las conexiones devolvía datos codificados correctamente, pero la otra los devolvía con la codificación errónea.

Después de dar muchas vueltas a la documentación de MySQL encontramos la directiva:

skip-character-set-client-handshake

La cual permite que MySQL se comporte como MySQL 4.0. y no haga caso de la codificación del cliente y fuerce a que se utilice la establecida por defecto con las variables character-set-server y collation-server

A nosotros esta variable de configuración nos solucionó el problema. Esperamos que os sirva de ayuda también a vosotros.
:D

———-
OJO! Si buscáis esta variable cuando estáis en consola, (por ejemplo con mysql >SHOW VARIABLES;) no desesperéis; esta variable no aparece en al mostrar las variables del sistema.

Escribe un comentario

You must be logged in to post a comment.