Importar archivo CSV a MySQL

Hoy volvi a necesitar importar un archivo CSV en MySQL.

El tema es que arme una planilla ODS copiando y pegando desde una tabla HTML desde la web.

En la planilla armé las cabeceras con los nombres de los campos como para tener una referencia mas adelante.

Mas o menos asi, tal cual es la tabla HTML, pero en LibreOffice Calc:

-------------------------------------------------
NOMBRE_CAMPO_1 + NOMBRE_CAMPO_2 + NOMBRE_CAMPO_3
-------------------------------------------------
registro 1     + blabla         + blabla
registro 2     + blabla         + blabla
registro 3     + blabla         + blabla
...............

Una vez que termine de pegar los registros, le agregue una columna nueva al principio con el campo ID, y complete con valores 1,2,3 y despues con el autocompletado el resto de los registros para que tengan un índice único:

-----------------------------------------------------
ID + NOMBRE_CAMPO_1 + NOMBRE_CAMPO_2 + NOMBRE_CAMPO_3
-----------------------------------------------------
1  + registro 1     + blabla         + blabla
2  + registro 2     + blabla         + blabla
3  + registro 3     + blabla         + blabla
4  + registro 4     + blabla         + blabla
..............

Una vez terminado, y guardado como corresponde, lo guardé como CSV, e indique algunas opciones como para no tener problemas en la importación.

En juego de caracteres: “Unicode UTF-8″
Separador de campo: “|” (pipe, sin las comillas)
Separador de texto: “” (nada, sin comillas)

El resto no lo toque. Listo.

Ahora el turno de crear una tabla en la DB para almacenar mis datos:

#~ mysql -u root -p
>mysql use[nombre];
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
>mysql CREATE TABLE [nombre_tabla] (
  -> id int(10) unsigned NOT NULL AUTO_INCREMENT,
  -> [nombre_campo_1] varchar(255) NOT NULL,
  -> [nombre_campo_2] varchar(255) NOT NULL,
  -> [nombre_campo_3] varchar(255) NOT NULL,
  -> PRIMARY KEY (id)
  ->) TYPE=InnoDB;
Query OK, 0 rows affected, 1 warning (0,11 sec)
>mysql quit;
Bye
#~

Ahora una vez copiado o movido a un directorio que me quede cómodo, entro por consola a este directorio, y me logueo en MySQL Server:

#~ cd /home/[cuenta]/[carpeta]
#~ mysql -u root -p
>mysql use [nombre_base_de_datos];
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
>mysql LOAD DATA LOCAL INFILE 'archivo.csv' INTO TABLE [nombre_tabla] FIELDS TERMINATED BY '|' IGNORE 1 LINES;
Query OK, 15976 rows affected (0,26 sec)
Records: 15976  Deleted: 0  Skipped: 0  Warnings: 0
>mysql quit;
Bye
#~

La última parte de la sentencia (IGNORE 1 LINES), es para evitar importar la primera linea del archivo CSV que contiene las cabeceras o nombres de campos de la tabla.

Mas información y opciones, en la doc oficial de MySQL: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

 

Deje un comentario