ColdFusion (MX y 7) trabaja por defecto en Unicode (UTF-8), mientras que uno suele estar más acostumbrado a Latin-1 (iso-8859-1) y tener muchos datos en ese formato. Tenemos pues dos opciones: o mantener las bases de datos en iso-8859-1 e incluir en el
application.cfm
algo tal que:
<cfcontent type="text/html; charset=ISO-8859-1">
<cfscript>setEncoding("FORM", "iso-8859-1");</cfscript>
, lo cual es rápido, sencillo, y encima funciona.
O [pausa dramática], también tenemos la opción, mucho más elegante, de trabajar directamente en UTF-8, que es hacia donde tiende toda la web y es lo más recomendable (
¿Qué es Unicode y porqué tanta perreta en usarlo?). En este caso, por supuesto, la cosa se nos lía:
Para empezar, ha de usarse MySQL 4.1 o superior, que incluye soporte para UTF-8, además de un excelente asistente de configuración para Windowseros. En dicho asistente hay que indicarle que use UTF-8 como juego de caracteres por defecto.
Problemilla: la gestión de claves de MySQL 4.1 ha cambiado desde las versiones anteriores, lo que da lugar a una serie de interesantes sucedidos que trataremos en un próximo post.
Obviando momentaneamente dicho problemilla, y como para facilitarnos la vida usamos
phpMyAdmin 2.6.1 para gestionar las bases de datos, debemos asegurarnos de que PHP cuenta con la extensión (
mbstring) para que no se nos líe con juegos de caracteres multibyte, cual es el caso de UTF-8. (
MySQL Control Center no acepta UTF-8 así que no es una opción en nuestro caso. Desconozco -de momento ;)- otros gestores). PHP 4.3.10, la versión que tenemos instalada, ya lo trae de paquete, y basta con descomentar la línea
extension=php_mbstring.dll
en
php.ini
y reiniciar PHP.
Por último, hay que indicarle a phpMyAdmin, si no lo ha deducido él solo, que use
Spanish (es-utf-8)
en Language. En el cotejamiento yo estoy usando
utf8_general_ci
y de momento va bien, así que siguiendo el viejo adagio de "si funciona, no lo toques", así lo he dejado. Y si dá problemas al ordenar textos con acentos y demás, pues nada, a jugar con el par de
utf8_spanish
que hay, a ver que pasa.... ;)
Instalados y configurados MySQL 4.1.*, PHP 4.3.10 y phpMyAdmin 2.6.1, ya podemos empezar a trabajar con UTF-8 en nuestra aplicación, y CF se queda tan a gustito sin tener que hacer conversiones innecesarias. Hemos hecho varias pruebas leyendo ficheros XML en iso-8859-1 y guardando los datos en MySQL con UTF-8, y va como la seda.
Mucho mucho ojo si ya tenemos contenidos en iso-8859-1 en nuestras bases de datos y hacemos que cambie a UTF-8. Aparte de que obviamente la codificación será incorrecta, el resultado en los formularios de phpMyAdmin al intentar editar los contenidos puede ser desastroso.
Más información sobre el fascinante mundo de los charsets y los collations en MySQL en
este artículo de mysql.com y en
este extracto de
MySQL Language Reference publicado por Que (que oportuno que este sea justo el capítulo que ponen de ejemplo).
PD: por cierto, aunque en teoría se pueden usar caracteres Unicode en los nombres de bases de datos, tablas y/o campos, mejor evítese problemas y use sólo los ASCII de toda la vida (o sea: nada de tildes ni eñes en estos nombres).
Actualización (20/04/06): desde hace ya bastante tiempo, MySQL Control Center ha sido sustituido por
MySQL Administrator y
MySQL Query Browser, dos herramientas que no sólo aceptan UTF-8, sino que son comodísimas de usar. Desde que las tengo instaladas he renegado completamente de Access (y del PHPMyAdmin, todo hay que decirlo)....