Category:Técnico

Problema de caracteres al importar una base de datos UTF-8 en MySQL

Muchas veces es necesario trasladar bases de datos de una máquina a otra por múltiples motivos (cambio de proveedor, cambio de máquina de desarrollo, etc). La manera más cómoda de hacerlo, si se tiene acceso a las consolas MySQL de ambas máquinas es realizar un volcado en sql desde la máquina origen mediante el comando mysqldump y luego restablecer dicho volcado en la máquina de destino inyectando el script volcado anteriormente mediante la línea de comando de mysql:

mysql -h host -u usuario -p -D basededatos < fichero.sql

Si el servidor de origen y el servidor de destino están configurados exactamente igual en lo que a conjuntos de caracteres se refiere, no habrá ningún problema, sin embargo si las configuraciones son diferentes (el caso más común es utf-8 por un lado y latin-XXX por otro), al utilizar la nueva base de datos observaremos que los caracteres especiales se han convertido en ristras de caracteres raros. La manera de realizar la importación correctamente es utilizar el parámetro "--default_character_set", de modo que la línea de comando quedaría algo así:

mysql -h host -u usuario -p --default_character_set utf8 -D basededatos < fichero.sql

Es importante darse cuenta que este problema no tiene nada que ver con la conexión a la base de datos que se utilice en la aplicación en el nuevo host sino que se trata de un problema relacionado estrictamente con la utilidad de importación de mysql.

Instalación de Eventum 2.2 en un servidor Windows, con IIS

– Instalar PHP.
– Instalar MySQL.
– Instalar las extensiones GD y MySQL de PHP.
– Descargar y descomprimir los archivos de Eventum en una carpeta accesible vía web.
– Crear una base de datos vacía con el nombre que se desee y un usuario con permisos totales sobre dicha base de datos.
– Acceder a dicha carpeta vía web. El sistema nos lleva automáticamente a una pantalla de configuración. Rellenarla con los datos solicitados, en concreto el usuario y la base de datos creada anteriormente. Tener a mano también la información de configuración de la cuenta de email que se utilizará para realizar envíos de correo. Dado que es fácil que falle algo la primera vez, es conveniente marcar la opción «Drop Tables If They Already Exist», que nos garantiza que podremos volver a ejecutar la instalación si algo falla sin obtener errores de tablas duplicadas.
– Si obtenemos el error : «Details: BLOB/TEXT column ‘sup_to’ can’t have a default value» se deberá a que el servidor de base de datos utilizado es MySQL>=5 y por defecto corre en un modo algo más estricto que las versiones anteriores. La solución es cambiar la forma en la que MySQL arranca eliminado el flag «STRICT_TRANS_TABLES» DE SQL Mode. Esto se puede hacer fácilmente con el MySQL Administrator accediendo a startup variables > Advanced > SQL mode.
– Finalmente, si todo ha ido bien, obtendremos una pantalla informándonos de que Eventum ha sido correctamente configurado y que está listo para ser usado. Lo último que deberemos hacer es o bien borrar la carpeta «setup» de Eventum, o bien cambiarle los permisos para evitar que pueda ser accedida sin nuestro conocimiento, ya que si se deja abierta, cualquier usuario externo podría cambiar nuestra configuración y estropear nuestra instalación.

¿Qué es Eventum?

Por si alguien está leyendo esto pero no sabe qué demonios es Eventum, se trata de un sistema que entra en la categoría de issue/bug trackers. Este tipo de sorftware está diseñado para permitir llevar un control detallado de todas las cuestiones relacionadas con el desarrollo de software, desde la anotación de bugs y planificación para su corrección, hasta la planificación de inclusión de nuevas características, tiempos de desarrollo, fechas previstas así como planificación de versionado. Resulta especialmente útil en entornos de desarrollo colaborativos.

Configurar PHP 5.2.10 en IIS 6 con FastCGI

1. Se presupone que IIS 6 está instalado y funcionando.
2. Descargar el instalador de fastcgi de http://www.iis.net/extensions/FastCGI o del sitio que más guste (hay muchas fuentes con diferentes implementaciones). Hay que tener cuidado con descargar la versión correcta: para 32 bits o para 64. Instalarlo.
3. Descargar el instalador de PHP de http://www.php.net. Ejecutarlo. Cuando pregunte cómo se desea instalar, elegir el funcionamiento a través de FastCGI. Seleccionar las extensiones que se desee instalar y terminar el proceso de instalación.
4. Una vez instalado, pinchar en Administrador IIS -> Web Sites -> [botón derecho] -> Properties -> Home Directory -> Configuration -> Add
5. En la pantalla que aparece, poner la ruta hacia la dll de fastcgi, que por defecto se habrá instalado en c:/windows/system32/inetsrv/fcgiext.dll. En extensión añade «php» y asegúrate de que está tildada la opción «Script engine». Guardar.
6. Configura manualmente el fichero c:/windows/system32/inetsrv/fcgiext.ini (si fastcgi se instaló en otra carpeta, el .ini también se encontrará ahí). Deben añadirse las secciones [TYPES] y [PHP5] así:
[Types]
php=PHP5
[PHP5]
ExePath=[rutahacia]php-cgi.exe
7. Listo tus scripts PHP son accesibles desde cualquier dominio configurado en el IIS o que configures posteriormente. Si sólo deseas hacerlo sobre un website en particular, realiza el paso 4 sólo sobre el website en el que desees activar la ejecución de scripts PHP.

Problemas en la versión 5.1.5 del conector ODBC de MySQL

La versión 5.1.5 del conector ODBC de MySQL da problemas que afectan a cualquier aplicación que lo utilice para conectarse a la base de datos. En mi caso el mensaje de error que me lanzaban diferentes página ASP era el siguiente:

«Error: File /applications/ip2country/lookup.asp Unexpected error. A trappable error
(C0000005) occurred in an external object. The script cannot continue running..»

Este error se producía de forma completamente aleatoria varios cientos de veces al día, llegando a ser terriblemente desesperante y a poner en peligro la relación con algún cliente molesto por la ristra continuada de mensajes de error en su página web.

Por supuesto inicialmente pensé que se trataba de algún bug en mi aplicación, sin embargo después de largas horas de debug conseguí llegar a la raíz: volviendo al conector antiguo (3.5) los errores desaparecían como por arte de magia. Cambiando al nuevo, pasaban pocos minutos antes de que empezara a producirse otra vez. Por supuesto la solución obvia hubiera sido volver al conector antiguo, sin embargo necesitaba las características UTF-8 del conector nuevo de las que el antiguo carecía.

Después de muchas vueltas por la red, dí con el hilo de discusión adecuado en el sitio de reporte de bugs de MySQL y encontré un parche no oficial que un usuario decía que había probado con éxito. Después de probarlo en los servidores a mi cargo puedo dar fe de que el parche funciona, aunque insisto en que no es oficial.

Para poner en marcha la nueva DLL sólo hace falta machacar la antigua y reiniciar el IIS.

El bug en el conector es bastante serio y por lo que pude averiguar, se viene arrastrando desde la versión 5.1.4 y a día de hoy (09/oct/2009) todavía no está solucionado, ni siquiera en la versión snapshot del driver. Espero que la versión final 5.1.6 lo solucione definitivamente.

El hilo de discusión al que hago referencia es el siguiente :

http://bugs.mysql.com/bug.php?id=36823

Quizá esta información sea útil para alguien más.

Notas sobre Mercurial

Mercurial es el sistema de control de versiones que elegí después de probarlo durante algunos días junto con Subversion y Git. La elección fue relativamente sencilla. Las características esenciales que me llevaron a decidirme por este CVS son:

– Facilidad de instalación. En comparación con Git, que requiere un mayor entendimiento de los entresijos internos del sistema tanto para su instalación como para su uso.

– Es un sistema distribuído, al igual que Git y a diferencia de Subversion, lo que elimina la necesidad de un repositorio centralizado. Puedes tener tantos repositorios de un mismo desarrollo como desees y abrir tantas ramas de desarrollo como se deseen.

– La interfaz y el trabajo día a día son bastante similares a los de Subversion, por lo que es bastante sencillo de utilizar, a diferencia de Git.

– Alto nivel de seguridad. Es posible configurarlo para conectarse a un repositorio a través de HTTP con una capa de seguridad por SSH con utilización de ficheros de claves privadas. La configuración de un repositorio Mercurial de estas características no es trivial, sin embargo es posible, cosa que no conseguí realizar con Subversion (aunque en teoría tamibén es posible).

En resumen, en mi opinión, tiene lo mejor de Git y de Subversion.

Trabajo con Mercurial

– No hay una manera «buena» de usarlo debido a que se trata de un sistema muy flexible, sin embargo algunos métodos son más escalables que otros.

– Es importante  fusionar siempre (realizar la operación merge), ya que esto nos permitirá encontrarnos con los conflictos antes, y por lo tanto serán más fáciles de resolver.

– No se debe dudar en utilizar múltiples árboles localmente durante la labor de desarrollo. Mercurial permite estas operaciones de una manera rápida y eficiente.

– Algo falla?, vuelve para atrás tantos pasos como necesites en otra rama.

¿Qué  añadiría yo a Mercurial?

Sería interesante  que en versiones futuras de Mercurial se mejore el interfaz, así como la posibilidad de exportar los ficheros modificados de un changeset cualquiera (no sólo la lista de cambios del changeset). Si se añadiese esta capacidad pienso que sería el CVS ideal.

Notas sobre la instalación de un OsCommerce

Estas notas son relativas a la versión 2.2rc2a. Se presupone la existencia de un servidor web con PHP y MySQL configurado. PHP necesita tener instaladas las extensiones MySQL, GD2, cUrl y OpenSSL.

0. Crear manualmente una base de datos vacía para la tienda, así como un usuario con su contraseña darle permisos totales para la base de datos creada.

1. Descargar la versión desde http://www.oscommerce.com/solutions/downloads

2. Descomprimirla en la carpeta en la que se quiera alojar (o subir los archivos por FTP).

3. Ejecutar en el navegador : http://[ruta]/catalog/install/ -> Seguir las instrucciones de instalación

4. Una vez instalado, descargar el módulo STS (Simple Template System) para gestionar plantillas de OsCommerce (aparentemente esto es innecesario para la versión 3.0, aunque no lo he comprobado). Se desarga de : http://addons.oscommerce.com/info/1524

5. Una vez desinstalado, descomprimir y copiar el contenido de la carpeta «STS/includes/» en la carpeta «catalog/includes/» y el contenido de la carpeta «Files for RC2/» en «catalog/»

6. Subir la plantilla. En particular yo he trabajado con plantillas de http://freeoscommerce.com. Estas plantillas van numeradas, el número es importante tenerlo en cuenta a la hora de la instalación de la misma. En este caso hay que subir el contenido de la carpeta «upload/» en la carpeta «catalog/».

7. Una vez subidos los ficheros de la plantilla, hay que activarla. Para ello vamos al módulo de administración  -> Módulos -> STS ->Editar. Aquí hay que cambiar:

– Use Templates? -> true.
– Set Template folder to freeoscommerce_###
– Set Default template file to freeoscommerce_###.html
– Use template for infoboxes -> true.

Listo, osCommerce  instalado  con  la hoja de estilos deseada. Ahora sólo queda personalizar la hoja de estilos deseada ajustándola a nuestras últimas necesidades y voilà. Evidentemente si la instalación de plantillas se realiza sobre un OsCommerce que ya esté funcionando, habría que hacer backup de todo por si hay que dar marcha atrás. Estas instrucciones están probadas sobre una instalación limpia de OsCommerce.

{ Piensa / Think }

"This is a waste of life. [...] the entire educational system in the modern day is nothing more than a cookie cutter processing plant that prepares humans for mostly predefined occupational roles. This element of human life has become so traditionally ingrained, that many falsely consider the nature of ‘having a job’ some form of human instinct. Even parents will ask their kids “What do you want to be when you grow up?” as though there was only one thing. This is disturbing and a violation of human potential." - The Zeitgeist Movement


"He aprendido que hay cosas que pueden ser comprendidas pero que nunca podrán ser explicadas con palabras sin desvirtuar su grandeza" - Andrés Pascual


"You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete." - Buckminster Fuller


"... I am the master of my fate. I am the captain of my soul." - William Ernest Henley