miércoles, 29 de julio de 2015

Importar/exportar datos en MySql con LOAD DATA INFILE desde y hacia un fichero externo

Documento sin título

Importar/exportar datos en MySql con LOAD DATA INFILE desde y hacia un fichero externo

 

La instrucción de MySql LOAD DATA INFILE nos permite cargar datos

desde un archivo externo, básicamente se trata de leer el contenido de un fichero y volcarlo en una tabla.

El comando en cuestión tiene la siguiente sintaxis básica:

LOAD DATA INFILE 'c:/archivo_datos.txt' INTO TABLE nombre_tabla;

Las opciones de las que dispone esta instrucción son numerosas y permiten adaptar el tipo de volcado

a nuestras necesidades concretas. Veamos un ejemplo:

LOAD DATA INFILE 'c:/archivo_datos.txt'  INTO TABLE nombre_tabla  
FIELDS TERMINATED BY ';'  
ENCLOSED BY '\"'  
ESCAPED BY '\\'  
LINES TERMINATED BY '\r\n'  

En este caso le estamos indicando al motor de base de datos que cargue el archivo

considerando que cada campo está separado por el carácter de punto y coma, también

que todos los valores le llegaran entrecomillados con comillas dobles (si usamos el

modificador OPTIONALLY sólo se entrecomillarán las columnas de texto y fecha),

el carácter de escape es la barra invertida y cada salto de línea se indica con \r\n

(Importante: Si se ha generado el fichero de texto en un sistema Windows , se tiene

que usar LINES TERMINATED BY '\r\n' para leer correctamente el fichero, ya que

los programas de Windows típicamente usan dos caracteres como terminadores de línea,

de lo contrario bastará el signo de nueva línea '\n').

Otra cuestión a considerar y que puede llegar a producir un verdadero dolor de cabeza

es el "conjunto de caracteres" y "collation" de la tabla. Aunque nuestra tabla sea 

utf-8(CHARACTER SET utf8, COLLATION utf8_general_ci) los acentos y las eñes no se

importarán correctamente. Para solucionar este problema debemos indicar CHARACTER SET UTF8

después del nombre de la tabla, y emplear LOCAL como parte del comando si estamos

cargando datos desde nuestro propio ordenador.

LOAD DATA LOCAL INFILE 'c:/archivo_datos.txt'  
INTO TABLE nombre_tabla CHARACTER SET UTF8  
FIELDS TERMINATED BY ';'  
OPTIONALLY ENCLOSED BY '\"'  
ESCAPED BY '\\'  
LINES TERMINATED BY '\r\n'  

Del mismo modo podemos realizar la operación contraria, es decir, generar un archivo de texto plano

con los datos de una tabla dada. Veamos un ejemplo:

SELECT * FROM nombre_tabla  
INTO OUTFILE 'c:/archivo_datos.txt'  
FIELDS TERMINATED BY ';'  
OPTIONALLY ENCLOSED BY '\"'  
LINES TERMINATED BY '\r\n';  

De esta manera obtenemos un archivo llamado "archivo_datos.txt" con un registro por línea,

cuyos valores de columna se encuentran separados por un punto y coma y los campos

con valores de texto y fechas se entrecomillarán.

1 comentario:

  1. Buen tutorial, gracias por compartirlo.
    ¿Hay alguna forma de indicar que lo campos pueden estar separados tanto por ";" como por ","?

    ResponderEliminar