system onlinepath: /guias/bases-de-datos/como-importar-un-csv-en-mysql-y-postgresql/mode: knowledge_baselocal:
Bases de datos · Nivel intermedio

Cómo importar un CSV en MySQL y PostgreSQL

Importar un CSV a una base de datos parece un copiar y pegar, pero es donde más gente tropieza: el separador equivocado, la codificación que rompe las tildes, una columna que no encaja. Con un poco de preparación previa, la carga masiva es rápida y sin sorpresas.

20 min de lectura▣ Actualizada el ◇ Por Underc0de
Respuesta rápida

Importar un archivo CSV (valores separados por comas) a MySQL o PostgreSQL parece un simple copiar y pegar, pero es donde más gente tropieza. La clave del éxito es la preparación previa, no el comando en sí. Antes de cargar: (1) crear la tabla destino con las columnas y los tipos adecuados para los datos del CSV; (2) revisar el separador —se llama CSV por «comas», pero muchísimos archivos usan punto y coma u otro carácter, sobre todo los exportados desde Excel en configuraciones regionales donde la coma es el decimal—; y (3) comprobar la codificación —si el archivo no está en UTF-8, las tildes y las eñes llegan rotas—. Con eso resuelto, cada motor tiene su comando de carga masiva: en MySQL es LOAD DATA INFILE, y en PostgreSQL es COPY (o \copy desde el cliente, que importa un archivo local sin necesitar permisos especiales en el servidor). Ambos leen el archivo entero y lo insertan de golpe, mucho más rápido que fila a fila. Al ejecutarlos se les indica el separador, la codificación, y si el archivo tiene una fila de encabezados que hay que saltar. El último acto —y el que casi nadie prevé— es manejar los errores de datos: los CSV del mundo real casi siempre tienen problemas —una fecha con formato raro, un campo vacío donde se esperaba un número, una fila con columnas de más o de menos, un texto con comillas o comas dentro— y la carga fallará o insertará basura si no se anticipan. La estrategia sensata: probar primero con una muestra pequeña del CSV para detectar los problemas, y considerar cargar los datos en una tabla intermedia con columnas de texto (que acepta casi cualquier cosa), limpiarlos ahí con SQL, y recién entonces pasarlos a la tabla definitiva con sus tipos correctos. Preparar la tabla, acertar el separador y la codificación, usar el comando de carga masiva del motor y anticipar los errores de datos: ese es el flujo que convierte una importación frustrante en una rutina. Y si lo que querés es analizar el CSV más que guardarlo, DuckDB es una alternativa muy ágil.

Ver índice de contenidos
  1. 01Preparación previa
  2. 02Los comandos de carga
  3. 03Errores de datos
  4. 04Errores frecuentes
  5. 05Preguntas frecuentes
  6. 06Fuentes

Preparación previa

El error más común al importar un CSV es lanzar el comando de carga sin preparar el terreno, y ahí es donde surgen casi todos los problemas. La preparación tiene tres partes:

PreparaciónQué revisar
Crear la tabla destinoColumnas y tipos adecuados a los datos del CSV
El separador¿Coma, punto y coma, tabulador? No asumir que es coma
La codificación¿UTF-8? Si no, las tildes y eñes se romperán
i
Los dos tropiezos clásicos: separador y codificación

Dos detalles causan la mayoría de las importaciones fallidas. El primero es el separador. El formato se llama «valores separados por comas», pero en la práctica muchísimos archivos no usan comas: los exportados desde una hoja de cálculo en configuraciones regionales donde la coma es el separador decimal usan punto y coma, y otros usan tabuladores. Si le decís al comando que el separador es la coma cuando en realidad es el punto y coma, la base de datos verá una sola columna gigante en vez de las columnas separadas, y la carga fallará o meterá todo en un campo. Siempre hay que abrir el CSV en un editor de texto (no en Excel, que lo interpreta) y mirar con qué carácter están separados los valores. El segundo tropiezo es la codificación. Si el archivo está guardado en una codificación distinta de UTF-8 (algo habitual en archivos viejos o de Windows), los caracteres especiales —tildes, eñes, símbolos— llegan corruptos a la base de datos, mostrándose como símbolos raros. La solución es asegurarse de que el archivo está en UTF-8 (convertirlo si hace falta) e indicarle la codificación correcta al comando de carga. Estos dos controles, hechos antes, evitan la mayoría de los dolores de cabeza.

Los comandos de carga

Diagrama que explica cómo importar un archivo de valores separados por comas a las bases de datos MySQL y PostgreSQL. En la parte superior se explica que importar un CSV parece un simple copiar y pegar pero es donde más gente tropieza, y que la clave del éxito es la preparación previa. Se detallan los tres pasos de preparación: crear la tabla destino con las columnas y los tipos adecuados; revisar el separador, ya que aunque se llame de valores separados por comas, muchos archivos usan punto y coma u otro carácter, especialmente los exportados desde hojas de cálculo donde la coma es el decimal; y comprobar la codificación, ya que si el archivo no está en la codificación universal, las tildes y las eñes llegan rotas. En el centro se muestran los comandos de carga masiva de cada motor. En MySQL es el comando de carga de datos desde archivo, y en PostgreSQL es el comando de copia, o su variante desde el cliente que importa un archivo local sin necesitar permisos especiales en el servidor. Ambos leen el archivo entero y lo insertan de golpe, mucho más rápido que insertar fila a fila. Al ejecutarlos se les indica el separador, la codificación y si el archivo tiene una fila de encabezados que hay que saltar. En la parte inferior se aborda el manejo de los errores de datos, que es lo que casi nadie prevé, ya que los archivos del mundo real casi siempre tienen problemas, como una fecha con formato raro, un campo vacío donde se esperaba un número, una fila con columnas de más o de menos, o un texto con comillas o comas dentro, y la carga fallará o insertará datos incorrectos si no se anticipan. La estrategia recomendada es probar primero con una muestra pequeña del archivo para detectar los problemas, y considerar cargar los datos en una tabla intermedia con columnas de texto que acepta casi cualquier cosa, limpiarlos ahí con SQL y luego pasarlos a la tabla definitiva con sus tipos correctos. Estilo de bases de datos, limpio y ordenado, con la preparación previa arriba, los comandos de carga de cada motor en el centro y el manejo de los errores de datos abajo.
La clave está en la preparación: crear la tabla, acertar el separador (no siempre es coma) y la codificación (UTF-8 o las tildes se rompen). Cada motor tiene su comando de carga masiva —LOAD DATA en MySQL, COPY en PostgreSQL—, que inserta el archivo de golpe. Y hay que anticipar los errores de datos, casi siempre presentes.

Cada motor tiene su comando de carga masiva, mucho más rápido que insertar fila a fila:

MotorComandoNota
MySQL / MariaDBLOAD DATA INFILEPuede requerir permisos y configuración del servidor
PostgreSQL (servidor)COPYEl archivo debe ser accesible por el servidor
PostgreSQL (cliente)\copyImporta un archivo local desde el cliente, sin permisos especiales
i
Carga masiva: por qué no insertar fila a fila

La razón de usar estos comandos —LOAD DATA en MySQL, COPY en PostgreSQL— en vez de generar miles de instrucciones INSERT individuales es el rendimiento. La carga masiva lee el archivo completo y lo inserta en una sola operación optimizada, que puede ser órdenes de magnitud más rápida que insertar fila por fila, donde cada inserción tiene su propio coste. Para un CSV de miles o millones de filas, la diferencia es entre segundos y horas. Al ejecutar el comando se le pasan los parámetros que preparaste: el separador real del archivo, la codificación, y si hay una fila de encabezados (la primera línea con los nombres de las columnas) que debe saltarse para no intentar insertarla como datos. Un detalle práctico útil: en PostgreSQL, el COPY «normal» exige que el servidor pueda leer el archivo (lo que complica las cosas si el archivo está en tu máquina y la base en otra), mientras que \copy —desde el cliente psql— lee un archivo local tuyo y no requiere permisos especiales en el servidor, así que suele ser la opción más cómoda para importar desde tu equipo.

Errores de datos

El acto final, y el que casi nadie prevé: los CSV del mundo real casi siempre tienen problemas en sus datos. Los más habituales:

  • Fechas con formato raro. Un formato de fecha que el motor no reconoce hace fallar la fila.
  • Campos vacíos donde se espera un número. Un vacío puede no ser aceptado por una columna numérica.
  • Filas con columnas de más o de menos. Una fila mal formada rompe la correspondencia con la tabla.
  • Comas o comillas dentro de un campo de texto. Confunden al parser si no están bien escapadas.
  • Espacios o caracteres invisibles. Ensucian los datos y provocan fallos sutiles.
!
La estrategia: muestra pequeña y tabla intermedia

Como los errores de datos son casi inevitables en un CSV real, la clave es anticiparlos en vez de descubrirlos cuando la carga falla a mitad de un millón de filas. Dos técnicas que ahorran mucho: primero, probar con una muestra pequeña —las primeras decenas de filas del CSV— antes de cargar el archivo entero, para detectar los problemas rápido y sin esperar. Y segundo, para archivos problemáticos, la técnica de la tabla intermedia (o «staging»): en vez de cargar directamente a la tabla final con sus tipos estrictos (números, fechas), se crea una tabla intermedia con todas las columnas de tipo texto, que acepta casi cualquier cosa sin rechazarla. Se carga el CSV ahí (casi siempre entra sin problemas), y dentro de la base de datos se limpian y validan los datos con SQL —corregir formatos de fecha, convertir textos a números, detectar y arreglar filas problemáticas—, y recién entonces se pasan, ya limpios, a la tabla definitiva con sus tipos correctos. Esta técnica convierte el frágil «que entre bien a la primera» en un proceso robusto de «entrar en bruto, limpiar, mover», que tolera los defectos del CSV. Combinado con una tabla destino bien diseñada, hace la importación fiable incluso con datos sucios.

Errores frecuentes

  • Asumir que el separador es la coma. Muchos CSV usan punto y coma o tabulador; abrir el archivo y comprobarlo.
  • Ignorar la codificación. Si no es UTF-8, las tildes y eñes llegan rotas; convertir o indicar la codificación.
  • No saltar la fila de encabezados. Se intenta insertar los nombres de columna como datos y falla.
  • Cargar el archivo entero sin probar antes. Una muestra pequeña detecta los problemas rápido.
  • Insertar fila a fila en vez de carga masiva. Es mucho más lento; usar LOAD DATA o COPY.
  • No anticipar los errores de datos. Los CSV reales casi siempre tienen defectos; usar tabla intermedia.
  • Usar COPY del servidor cuando el archivo es local. En PostgreSQL, \copy del cliente evita problemas de permisos.

Preguntas frecuentes

¿Cómo importo un CSV a MySQL o PostgreSQL?

Importar un archivo de valores separados por comas a MySQL o PostgreSQL se hace mediante los comandos de carga masiva de cada motor, pero el éxito depende sobre todo de una buena preparación previa, ya que es en los detalles del archivo y de la tabla donde surgen la mayoría de los problemas. El proceso completo consta de varias fases. La primera es la preparación previa, que tiene tres partes fundamentales: crear la tabla de destino con las columnas y los tipos de datos adecuados para los datos que contiene el archivo; revisar cuál es el separador que utiliza el archivo, ya que aunque el formato se llame de valores separados por comas, en la práctica muchos archivos usan punto y coma u otro carácter, especialmente los exportados desde hojas de cálculo en configuraciones regionales donde la coma actúa como separador decimal; y comprobar la codificación del archivo, ya que si no está en la codificación universal, los caracteres especiales como las tildes y las eñes llegarán corruptos a la base de datos. La segunda fase es ejecutar el comando de carga masiva propio de cada motor. En MySQL, el comando es el de carga de datos desde un archivo, mientras que en PostgreSQL es el comando de copia, que tiene además una variante que se ejecuta desde el cliente y que permite importar un archivo local sin necesitar permisos especiales en el servidor, siendo esta variante muy cómoda para importar desde el propio equipo. Estos comandos leen el archivo completo y lo insertan de golpe, lo que es mucho más rápido que insertar los datos fila a fila. Al ejecutarlos hay que indicarles el separador real del archivo, la codificación y si el archivo tiene una primera fila de encabezados con los nombres de las columnas que hay que saltar para no intentar insertarla como datos. La tercera fase, que a menudo se olvida, es manejar los errores en los datos, ya que los archivos del mundo real casi siempre presentan problemas como fechas con formatos inesperados, campos vacíos donde se espera un número, filas con un número incorrecto de columnas o textos con caracteres conflictivos, que pueden hacer que la carga falle o inserte datos incorrectos. Para gestionar esto se recomienda probar primero con una muestra pequeña del archivo y, en casos problemáticos, cargar los datos en una tabla intermedia de columnas de texto, limpiarlos con instrucciones de la base de datos y luego pasarlos a la tabla definitiva. Siguiendo estas fases, la importación resulta fiable y eficiente.

¿Por qué el separador del CSV causa tantos problemas?

El separador del archivo de valores separados por comas causa muchos problemas porque, a pesar de que el formato se llama de valores separados por comas, en la práctica una gran cantidad de archivos no usan la coma como separador, sino el punto y coma u otro carácter, y si al importar se indica un separador equivocado, la base de datos no interpreta correctamente las columnas y la carga falla o mete todos los datos en un solo campo. El nombre del formato induce a pensar que los valores siempre están separados por comas, pero la realidad es más variada. Un caso muy habitual es el de los archivos exportados desde hojas de cálculo en configuraciones regionales donde la coma se utiliza como separador decimal de los números, es decir, donde los decimales se escriben con coma en lugar de con punto. En esas configuraciones, para evitar la confusión entre la coma decimal y la coma separadora de campos, las hojas de cálculo exportan los archivos usando el punto y coma como separador de campos en lugar de la coma. Otros archivos utilizan el tabulador como separador. El problema surge cuando, al importar el archivo, se le indica al comando de carga que el separador es la coma cuando en realidad el archivo usa punto y coma u otro carácter. En ese caso, la base de datos, al no encontrar comas separando los valores, o al encontrarlas en lugares equivocados, no puede dividir correctamente cada línea en sus columnas, y el resultado es que interpreta toda la línea como una sola columna gigante, o divide mal los datos, lo que hace que la carga falle o que los datos queden mal distribuidos en la tabla. Para evitar este problema, la recomendación es no asumir nunca cuál es el separador, sino comprobarlo abriendo el archivo en un editor de texto plano, y no en una hoja de cálculo, ya que esta última interpreta el archivo y oculta el separador real, mostrando los datos ya organizados en columnas. Al abrir el archivo en un editor de texto se ve el contenido tal cual está guardado, y se puede identificar con qué carácter están separados realmente los valores. Una vez identificado el separador correcto, se le indica al comando de carga, y así la base de datos puede dividir correctamente cada línea en sus columnas. Esta simple comprobación previa del separador evita uno de los tropiezos más frecuentes y frustrantes al importar archivos de este tipo.

¿Por qué se rompen las tildes al importar?

Las tildes, las eñes y otros caracteres especiales se rompen al importar un archivo cuando la codificación del archivo no coincide con la que espera la base de datos, mostrándose como símbolos extraños o caracteres sin sentido, y esto ocurre habitualmente cuando el archivo no está guardado en la codificación universal. La codificación es la forma en que se representan los caracteres como secuencias de bytes en un archivo, y existen distintas codificaciones que representan los caracteres de maneras diferentes. La codificación universal es la que se ha establecido como estándar y la que las bases de datos modernas suelen esperar y usar por defecto, ya que puede representar prácticamente todos los caracteres de todos los idiomas. El problema surge cuando el archivo que se quiere importar está guardado en una codificación distinta, algo frecuente en archivos antiguos, en archivos generados en ciertos sistemas o programas, o en archivos exportados con configuraciones que no usan la codificación universal. En esos casos, los caracteres básicos como las letras sin acentuar y los números suelen representarse igual y no dan problemas, pero los caracteres especiales, como las vocales con tilde, la eñe y otros símbolos propios de cada idioma, se representan de forma diferente según la codificación. Si la base de datos interpreta los bytes del archivo usando una codificación distinta de aquella con la que se guardó, esos caracteres especiales se traducen incorrectamente y aparecen como símbolos extraños, combinaciones raras de caracteres o signos sin sentido, lo que se conoce como caracteres corruptos. La solución a este problema tiene dos vertientes. La primera es asegurarse de que el archivo esté guardado en la codificación universal, para lo cual, si no lo está, se puede convertir usando un editor de texto o una herramienta que permita cambiar la codificación del archivo, guardándolo de nuevo en la codificación universal. La segunda es indicar explícitamente al comando de carga cuál es la codificación del archivo, de modo que la base de datos lo interprete correctamente, ya que muchos comandos de importación permiten especificar la codificación del archivo de origen. Comprobar y gestionar correctamente la codificación antes de importar es, por tanto, uno de los controles previos esenciales, junto con la verificación del separador, y evita el frustrante problema de acabar con una base de datos llena de textos con las tildes y las eñes corruptas, que además luego habría que corregir con un trabajo adicional.

¿Qué son LOAD DATA y COPY?

El comando de carga de datos desde archivo de MySQL, conocido como LOAD DATA, y el comando de copia de PostgreSQL, conocido como COPY, son los comandos de carga masiva de cada uno de estos motores de base de datos, es decir, las instrucciones que permiten importar de forma eficiente un archivo completo de datos, como uno de valores separados por comas, insertándolo en una tabla de una sola vez en lugar de fila a fila. La característica esencial de estos comandos es que realizan una carga masiva, lo que significa que leen el archivo completo y lo insertan en la tabla mediante una operación optimizada, en contraste con la alternativa de generar y ejecutar una instrucción de inserción individual por cada fila del archivo. Esta diferencia es muy importante por motivos de rendimiento, ya que la carga masiva puede ser órdenes de magnitud más rápida que la inserción fila a fila, en la que cada inserción tiene su propio coste de procesamiento. Para un archivo con miles o millones de filas, la diferencia de tiempo entre una y otra técnica puede ser enorme, pasando de segundos a horas, por lo que para importar cantidades apreciables de datos siempre conviene usar el comando de carga masiva del motor correspondiente. En MySQL, este comando es el de carga de datos desde un archivo, que puede requerir ciertos permisos y configuraciones en el servidor para poder leer archivos. En PostgreSQL, el comando de copia tiene dos variantes importantes: la variante que se ejecuta en el servidor, que requiere que el propio servidor de la base de datos pueda acceder al archivo, lo que puede ser un inconveniente si el archivo está en el equipo del usuario y la base de datos en otro servidor; y una variante que se ejecuta desde el cliente de línea de comandos, que permite importar un archivo local del usuario sin necesitar permisos especiales en el servidor, siendo esta variante muy cómoda y práctica para importar datos desde el propio equipo. Al ejecutar cualquiera de estos comandos, hay que indicarles los parámetros que se han determinado en la preparación previa, como el separador real que utiliza el archivo, la codificación del archivo y si este tiene una primera fila de encabezados con los nombres de las columnas que hay que saltar para no intentar insertarla como si fuera un dato más. En resumen, estos comandos son la herramienta adecuada y eficiente para importar archivos de datos a las bases de datos, y conocer el de cada motor y sus opciones es esencial para realizar importaciones rápidas y correctas.

¿Cómo manejo los errores de datos del CSV?

Los errores en los datos de un archivo de valores separados por comas se manejan anticipándolos, ya que los archivos del mundo real casi siempre presentan problemas, y las dos técnicas más útiles para ello son probar primero con una muestra pequeña del archivo y, en casos problemáticos, cargar los datos en una tabla intermedia de columnas de texto para limpiarlos antes de pasarlos a la tabla definitiva. El punto de partida es asumir que los datos del archivo tendrán defectos, porque en la práctica es lo habitual. Entre los problemas más frecuentes están las fechas con formatos que el motor no reconoce, los campos vacíos en columnas donde se espera un número, las filas con un número de columnas distinto del esperado, los textos que contienen comas o comillas dentro de un campo sin estar correctamente escapados, y la presencia de espacios o caracteres invisibles que ensucian los datos. Cualquiera de estos problemas puede hacer que la carga falle o que inserte datos incorrectos. La primera técnica para manejarlos es probar la importación con una muestra pequeña del archivo, por ejemplo con las primeras decenas de filas, antes de cargar el archivo completo. Esto permite detectar rápidamente los problemas sin tener que esperar a que se procese todo el archivo y sin arriesgarse a que la carga falle a mitad de un archivo enorme, de modo que se pueden identificar y corregir los defectos con agilidad. La segunda técnica, especialmente útil para archivos con muchos problemas, es la de la tabla intermedia, también llamada de preparación. En lugar de cargar los datos directamente en la tabla definitiva, que tiene tipos de datos estrictos como números y fechas que rechazarían los valores mal formados, se crea una tabla intermedia en la que todas las columnas son de tipo texto, ya que este tipo acepta prácticamente cualquier valor sin rechazarlo. Se cargan los datos del archivo en esa tabla intermedia, lo que casi siempre funciona sin problemas al no haber restricciones de tipo, y una vez dentro de la base de datos se limpian y validan los datos usando instrucciones de la propia base, corrigiendo los formatos de fecha, convirtiendo los textos a números, detectando y arreglando las filas problemáticas y depurando los datos. Solo cuando los datos ya están limpios se pasan, mediante una instrucción de la base de datos, a la tabla definitiva con sus tipos correctos. Esta técnica convierte el frágil planteamiento de que todo entre bien a la primera en un proceso robusto de cargar en bruto, limpiar y mover, que tolera los defectos del archivo y garantiza que los datos que acaban en la tabla final estén correctos y bien tipados.

¿Conviene importar el CSV o analizarlo directamente?

Conviene importar el archivo de valores separados por comas a una base de datos cuando se quiere almacenar los datos de forma permanente e integrarlos con el resto del sistema, mientras que si el objetivo es simplemente analizar los datos del archivo de forma puntual, puede ser más ágil analizarlo directamente con una herramienta orientada al análisis, como una base de datos analítica que puede consultar archivos sin necesidad de importarlos previamente. La decisión depende, por tanto, del objetivo que se persiga con los datos del archivo. La importación a una base de datos tradicional como MySQL o PostgreSQL es la opción adecuada cuando los datos van a formar parte de un sistema de forma duradera, cuando se van a combinar y relacionar con otros datos ya existentes en la base, cuando van a ser consultados y modificados de forma continua por una aplicación, o cuando se necesita la integridad, la persistencia y las capacidades de gestión que ofrece una base de datos. En estos casos, importar el archivo mediante los comandos de carga masiva, con la debida preparación previa y el manejo de los errores de datos, es lo correcto, ya que integra los datos en la base para su uso continuado. Sin embargo, cuando el objetivo no es almacenar los datos sino analizarlos de forma puntual, por ejemplo para explorar un conjunto de datos, hacer unos cálculos, responder unas preguntas concretas o generar un informe, importar el archivo a una base de datos tradicional puede ser un rodeo innecesario, con todo el trabajo de preparación que conlleva. En esos casos resulta más ágil recurrir a una herramienta orientada al análisis de datos que sea capaz de consultar directamente los archivos, sin necesidad de crear una tabla ni de ejecutar un proceso de importación previo. Existen bases de datos analíticas diseñadas precisamente para este propósito, que permiten ejecutar consultas directamente sobre archivos de datos como los de valores separados por comas, de forma muy rápida y sin apenas configuración, lo que las hace idóneas para el análisis exploratorio y puntual de datos. La diferencia de enfoque es que la importación a una base de datos tradicional está orientada al almacenamiento y la gestión continuada de los datos, mientras que el análisis directo con una herramienta analítica está orientado a explorar y consultar los datos de forma rápida sin el compromiso de almacenarlos. Por ello, antes de emprender la importación de un archivo, conviene preguntarse si realmente se quieren almacenar y gestionar esos datos, en cuyo caso la importación es lo adecuado, o si solo se quieren analizar, en cuyo caso una herramienta de análisis directo puede ahorrar mucho trabajo y ofrecer un camino más ágil hacia el objetivo.

Fuentes

Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.

Aportes de la comunidad Underc0de

  1. Underc0de, foro. Bases de datos. Carga e importación de datos.
  2. Underc0de, blog. Blog de Underc0de. Gestión de datos.

Documentación oficial

  1. PostgreSQL. COPY. Carga masiva desde archivo.
  2. Oracle (MySQL). LOAD DATA. Carga masiva en MySQL.
  3. IETF. RFC 4180 (CSV). El formato de valores separados por comas.
  4. PostgreSQL. psql (\copy). Importación desde el cliente.