viernes, marzo 19, 2010

Migrar DBF a MySQL

La siguiente liga esta en español y tiene varias opciones para manejar la Migración de Access y DBF (tambien llamados XBase) a MySQL. (ver aquí)

El que me parece que nos puede ser más útil es la parte donde describe dbf2mysql se puede descargar de http://sourceforge.net/projects/mydbf2mysql/

A la letra dice:

dbf2mysql es una pequeña y excelente aplicación que

genera información SQL a partir de archivos xBase. He aquí
una traducción de sus opciones:

                   
-v muestra detalles de la conversión
-vv muestra más detalles
-vvv incluye informe de progreso
-f traduce los nombres de campo a minúsculas
-u traduce los textos de campos alfanuméricos a mayúsculas
-l traduce los textos de campos alfanuméricos a minúsculas
-n no se agrega \'NOT NULL\' en las sentencias de creación de tabla
-o exporta solo los campos listados
-e archivo para conversión de caracteres
-s substituye permite cambiar nombres de campos.
Ej. -s NOMBRE=AYN,DIR=DIRECCION
-i lista de campos a indexar (atte: genera UN indice por campo)
-d base de datos donde se insertaran los datos
-t tabla donde se insertarán los datos
-c crea la tabla si no existe
-cc crea la tabla, pero no inserta registros
-p indica la clave primaria
-h indica server donde conectarse
-F los campos de caracteres se formatean como de longitud fija
-q modo rápido inserta los registros a través de un archivo temporal usando la sentencia LOAD DATA INFILE
-r quita espacios antes y después de datos alfanuméricos

Suponiendo que quiero hacer una
conversión directa, solo necesito crear la base de datos en
blanco, por ejemplo desde la consola mysql:

create database libros;
quit

Y luego ejecutar dbf2mysql para crear las tablas e insertar los
datos:

dbf2mysql -h localhost -d libros -t autores -c -f -p idautor autores.dbf
dbf2mysql -h localhost -d libros -t libros -c -f -p idlibro libros.dbf
dbf2mysql -h localhost -d libros -t temas -c -f -p idtema temas.dbf
dbf2mysql -h localhost -d libros -t autorlib -c -f -p idautorlib autorlib.dbf

La principal desventaja de este método es que no se crean
algunos atributos deseables, como es el caso de los campos
autoincrementables. En este caso, lo más recomendable es crear
nuestra propia estructura, otra vez volvemos al método de
crear la estructura con un editor ASCII y generar la base de datos
vacía con la consola MySQL como se explico aquí. Luego
se insertan los datos con este conjunto modificado de comandos
dbf2mysql:

dbf2mysql -h localhost -d libros -t autores -f /mnt/c/temp/autores.dbf
dbf2mysql -h localhost -d libros -t libros -f /mnt/c/temp/libros.dbf
dbf2mysql -h localhost -d libros -t temas -f /mnt/c/temp/temas.dbf
dbf2mysql -h localhost -d libros -t autorlib -f /mnt/c/temp/autorlib.dbf

martes, marzo 16, 2010

MySQL - Nombres - Que no sea sensible a mayúsculas o minúsculas (M/m).

Este punto aplica para que la plataforma no sea sensible a mayúsculas/minúsculas, como Linux.

Editar el archivo de configuración my.cnf
vi /etc/my.cnf

Ubicar la sección [mysqld] y agregar la siguiente opción
lower_case_table_names = 1

por ultimo reiniciar el servicio
rcmysql restart

Los valores posibles para el parámetro mencionado son:
0 - Los nombres de base de datos y tablas se almacenan en disco usando el parámetro especificado en las sentencias CREATE DATABASE o CREATE TABLE. La comparación de nombres es sensible a M/m. Note que si es forzado el parámetro a 0 en una plataforma no sensible, puede originar corrupción en los índices si se mezclan M/m en los nombres de tablas.
1 - Los nombres de tabals son almacenados en disco en minúsculas y las comparaciones de nombres no son sensibles a M/m. MySQL convierte todos los nombres en minúsculas al almacenar y para su revisón. Esto aplica también para los alias de las tablas.
2 - Los nombres de base de datos y tablas se almacenan en disco usando el parámetro especificado en las sentencias CREATE DATABASE o CREATE TABLE, pero MySQL convierte estos a minúsculas. La comparación de nombres no es sensible a M/m. Esta opción es solo para plataformas que no sean sensibles a M/m.

mas información:
http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html