lunes, 16 de agosto de 2010

MySql, PHP y la codificación utf8

Para evitar problemas con acentos, eñes, etc. y de paso maximizar la compatibilidad de nuestras páginas y bases de datos MySql con cualquier idioma y distintos conjuntos de caracteres, lo mejor es utilizar o establecer por defecto el tipo de codificación UTF-8.

La mejor opción es configurar el servidor MySql para que trabaje con codificación UTF-8 por defecto añadiendo estas líneas en el archivo my.ini localizar [mysqld].

default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET collation_connection = utf8_general_ci'
init_connect = 'SET NAMES utf8'

Si te interesa profundizar en el tema de los "encodings" y mysql no te pierdas este artículo del Blog personal de Jynus.

El servidor Apache también dispone de una directiva llamada AddDefaultCharset que debemos establecer como utf-8 para que no aparezcan caracteres extraños en lugar de acentos, eñes, etc.

AddDefaultCharset utf-8

En el php.ini la directiva default_charset también tiene algo que ver en todo este galimatias de tipos de codificación y caracteres.

default_charset = "iso-8859-1"

Mediante PHP también es posible configurar el charset en el momento de usar cualquier tabla, para ello debemos especificar el siguiente código después de realizar la conexión y la selección de la BD (mysql_connect – mysql_select_db) y antes de ejecutar cualquier consulta.

mysql_query ("SET NAMES 'utf8'");

En PHP 5.2 o superior podemos también usar:

mysql_set_charset("utf8", $conn);

Una función muy práctica que sirve para ver el charset que está devolviendo MySql.

mysql_client_encoding($conn);