» » Importar datos CSV a MySQL

Importar datos CSV a MySQL

Publicado en: Tecnología | 7

Existe una sentencia de comandos MySQL para importar un fichero separado por tabuladores, punto y coma, coma, etc. a una tabla de datos. Y yo creándome ficheros en php para tal fin… ya me vale.

¿De qué se trata?
El comando ‘load data’ nos permite importar a una tabla de datos de MySQL el contenido de un fichero delimitado por caracteres. Quién no ha tenido que traerse a la base de datos la lista de usuarios con sus correos electrónicos para manejarlos convenientemente con una aplicación que ataque a la base de datos? Pues eso hace este comando, pero sin tener previamente un script en php, por ejemplo, para importarlos.

¿A quién va dirigido?
A todos los que, como el menda, prefieren tener más tiempo libre y menos dedicado al trabajo. A veces… se puede.

Ejecutando
El comando es bastante sencillo. Desde la interfaz de comandos de nuestro sistema, entramos en la shell de comandos de MySQL:

$ mysql -u user_mysql -p

Damos un usuario con permisos, user_mysql, a la base de datos sobre la que vamos a trabajar y la contraseña.
Una vez dentro de la shell de mysql, escogemos la base de datos donde querramos importar los datos:

mysql> use db_mysql

Una vez en la base de datos, ejecutamos el comando para importar el fichero delimitado por caracteres:

mysql> LOAD DATA LOCAL INFILE '/fichero_por_punto_y_coma.csv'
INTO TABLE tabla_mysql FIELDS TERMINATED BY ';'
LINES TERMINATED BY 'r' (campo1, campo2, campo3);
Query OK, 106 rows affected (0.00 sec)
Records: 106  Deleted: 0  Skipped: 0  Warnings: 0

Una vez ejecutado, mysql nos informa de la ejecución (tiempo de ejecución, líneas añadidas a la tabla, si se ha borrado algún registro, si se ha omitido alguno y si alguno ha producido error). El fichero, al que se le pasa la ruta completa del disco duro, en este caso está en el raíz del disco de arranque (‘/fichero_por_punto_y_coma.csv’), se añade en local, podría hacerse en remoto, al host de la base de datos, pero para prevenir errores lo hemos colocado el equipo donde tenemos la base de datos. Al comando ‘LOAD DATA LOCAL INFILE’ le pasamos el fichero que vamos a importar, la tabla destino de la base, en este caso ‘usuarios’ y las siguientes opciones son referentes al contenido del fichero: carácter delimitador de la seperación de campos, en este caso ‘;’, pero podría ser tabulador (‘\t’), coma (‘,’), punto (‘.’) o cualquiera que querramos usar; terminador de línea, que en sistemas Mac es ‘\r’ y en Windows y Unix ‘\n’. Y finalmente, entre paréntesis, ponemos el orden de los campos de la tabla donde vamos a insertar los valores de nuestro fichero de texto.

Es muy sencillo y potente, podéis encontrar más información de este comando en la documentación de MySQL.

SaludoX

7 Comentarios

  1. raul garcia
    | Responder

    Gracias me fue muy util

  2. Alberto S.
    | Responder

    Antes que nada gracias por haberte tomado el tiempo de escribir esto, me ha resultado muy útil, sólo que hay un detalle que no he podido corregir, a la hora de importar los datos que tengo en csv, en mi BD no me respeta los acentos, «ñ» ni caracter alguno de esta naturaleza, mi base esta con cotejamiento UTF8_SPANISH_CI, al igual que mis campos. Para manejarla uso PhpMyAdmin.

    Espero que me puedas ayudar.

    Nuevamente, Gracias!

  3. nico
    | Responder

    Hola Alberto.
    Un placer compartir y más aúnu si le vale de algo a alguien, jeje

    Mira el artículo del blog: ‘Convertir caracteres codificados en iso-8859-1 a UTF-8’ a ver si te sirve, lo mismo tienes que cambiar la codifiación de salida, pero tendría que funcionar

    Suerte.

  4. Martin
    | Responder

    No puedo ejecutar el comando, debo haber ubicado mal el archivo CSV. en que lugar tiene que estar?

  5. nico
    | Responder

    Hola Martin,
    Seguro que ya habrás solucionado el problema, han pasado casi dos meses! Si es que tengo todo esto abandonado, no puede ser…

    El fichero CSV puedes tenerlo donde quieras, con permisos de lectura, eso si, que suele ser lo normal. Desplázate al directorio donde tengas el fichero CSV, con el comando ‘cd’ para cambiar de directorios. Una vez en ese directorio ejecuta el comando…
    LOAD DATA LOCAL INFILE ‘fichero_por_punto_y_coma.csv’
    sin poner barras ni nada, simplemente el nombre del fichero CSV

    Suerte

  6. Karla
    | Responder

    Hola… yo trate de importarla pero me marca un error, me dice que los datos se truncaron en una de las columnas de los atributos, pero no entiendo porque. Como puedo resolverlo?

    • nico
      | Responder

      Hola Karla. Sin conocer el error exacto, ni los datos que van el CSV (sobre todo si hay retornos de carro que MySQL entienda como un nuevo registro en la tabla) no puedo ayudarte.

      Revisa esa columna en el CSV, si en realidad está bien formatada, y que MySQL no espera los datos de otra forma. Puedes probar a importar solo ese registro que ha dado error para llegar a dar con el fallo real.

      David

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.