9/21/2009

Migrar de ISO-8859-1 a UTF-8 en MySQL

Útil para las migraciones

Estaba cambiando el encoding (de ISO-8859-1 a UTF-8) a una base de datos y al intentar guardar (con PHP) una vocal con acento o una "ñ" estas se guardaban con otros caracteres. Básicamente para solucionar este inconveniente hay que ejecutar la sentencia SET NAMES 'utf8' después de realizar la conexión y seleccionar la Base de Datos:
$enlace = @mysql_connect($host, $user, $pass);
@mysql_select_db($db_name, $enlace) or die(mysql_error());
@mysql_query("SET NAMES 'utf8'");
Y con esto solucionamos el problema de los caracteres extraños que nos generaba al guardar.

Les recomiendo leer los siguientes enlases:

9/10/2009

Obtener el total de registros en MySQL

Bastante útil cuando utilizamos paginadores

Cuando filtramos un SELECT con la clausula LIMIT en MySQL solo nos devolverá el numero de filas que definamos, al hacer esto no sabemos a ciencia cierta el total de filas que nos retornaría este query sin esta cláusula. Para solucionar esto agregamos después del SELECT la opción SQL_CALC_FOUND_ROWS, posteriormente podemos capturar el total de registros que nos entregaría este SELECT si no le asignamos el LIMIT.
SELECT SQL_CALC_FOUND_ROWS * FROM tabla WHERE id > 100 LIMIT 10;
Posterior a la ejecución del query anterior, ejecutamos este query, el cual nos devolverá un número que indica cuántas filas hubiese devuelto el primer SELECT.
SELECT FOUND_ROWS();
En la siguiente página hay más información al respecto

8/27/2009

Actualizar dos tablas con MySQL

Este query me salvo muchas horas de trabajo

Estaba comparando los datos entre dos tablas con la misma estructura (una es temporal de la otra) y me percaté que existían inconsistencias entre varios registros, ir de registro en registro es una tarea algo... complicada y molesta, entonces:

¿Cómo puedo actualizar los registros de la tabla_a con los datos la tabla_b en MySQL?

Googleando encontré el siguiente query:
UPDATE tabla_a, tabla_b
SET tabla_a.campo1 = tabla_b.campo1, tabla_a.campo2 = tabla_b.campo2
WHERE tabla_a.identificador = tabla_b.identificador
Como ves, podemos traspasar los datos de una tabla a otra con un solo query.

Actualización
Otra forma de actualizar una tabla con el contenido de otra:
UPDATE tabla_a
JOIN tabla_b ON tabla_a.identificador = tabla_b.identificador
SET tabla_a.campo1 = tabla_b.campo1, tabla_a.campo2 = tabla_b.campo2
WHERE tabla_a.valor > 10

8/26/2009

Workbench de MySQL

Una ayuda al momento de modelar nuestra base de datos

La tarea es titánica, la misión es documentar el modelo de datos de un proyecto en donde las tablas son mas de 80 y la conexión entre ellas termina formando una tela de araña. El puma me recomendó Workbench de Mysql para crear el modelo.


La herramienta en si es excelente, está disponible para Linux, Mac OS y Windows. Lo interesante es que puede realizar ingeniería inversa a una base de datos ya existente en la red, exportar dicha estructura en formato SQL y también puede sincronizar directamente los cambios realizados para mantenciones en la estructura.

En estos momentos estoy trabajando con Ubuntu 9.04 de 64 bits, en un par de ocasiones se ha cerrado inesperadamente al momento de guardar los cambios, pero al volver abrir el ambiente, noto que no se ha perdido ni un solo dato.

8/19/2009

Instalando Windows XP en Acer Aspire 5516

Cuando algo tan trivial se vuelve complicado

Estuve una semana y un par de días, involucrado en algo que es muy simple para algunos mortales. Básicamente la tarea consistía en insertar un CD o DVD (con algún Windows pirateado), esperar y seguir los pasos de instalación y disfrutar de una linda tarde buscando los drivers para mi flamante notebook Acer Aspire 5516, pero esto no fue así ya que tristemente me quedé pegado en la primera parte.

Me aparecía una pantalla negra después del mensaje "Presione cualquier tecla para iniciar desde el DVD", creí que eran los drivers del disco SATA, pero inserte el mismo CD en otro Notebook (con el mismo disco SATA - Wester Digital - de 160GB) y la instalación se ejecutó sin ningún problema.

¿Alguna maldición?, ¿Dios ya no me quiere?, ¿Alguna conspiración de Ubuntu para no poder ocupar Windows?, en realidad la culpa la tenia el mismo disco SATA. Varias soluciones encontré y entre ellas descubrí que existía nLite.

En pocas palabras nLite es un software para agregar componentes, programas y controladores a cualquier Windows que tengamos a mano, con el podemos fabricar un Windows a nuestro gusto y necesidades, de acá nacieron varios Windows desatendidos, como por ejemplo el UE o el Colossus.

Después de descargarme los controladores del disco SATA y crear un nuevo Windows agregando estos controladores, no me solucionó el problema que tenía con la pantalla negra que me aparecía en el comienzo de la instalación.

Vuelta a tras, decidí borrar el MBR del disco (previo respaldo de mis archivos) y construir la tabla de particiones desde cero. Santo remedio, inserté el disco de Windows que no me funcionaba en un comienzo y me reconoció el disco, la instalación siguió su curso normal y en menos de 30 minutos tenia mi Notbook con Windows XP.

Obviamente instalé Ubuntu 9.04 en una segunda partición :D

7/06/2009

Algunos tips en consola v1.0

Cambiar permisos de varios ficheros a la vez

Estaba migrando de Windows a Linux (Ubuntu 9.04) en el trabajo y todos los ficheros que estaban en la partición (NTFS) de Windows tenían permisos de ejecución (+x).

Un compañero de trabajo (El Puma) me dijo que existía un comando en consola, que de forma automática, modificaba los permisos de todos los ficheros de manera recursiva, ya que el comando busca todos los elementos de tipo fichero y a cada uno le ejecuta el comando chmod.

 find -type f -exec chmod -x {} \;  

Me salvo el día, ya que ir quitando (fichero por fichero) el permiso de ejecución me hubiera tomado mucho tiempo.

Editor Midnight Commander

El siguiente comando es para modificar el editor que (por defecto) utilizará el Midnight Commander al momento de editar un fichero.

 sudo update-alternatives --config editor