Conversor de CSV para SQL (gerador de instruções INSERT)

Converte arquivos CSV em instruções SQL INSERT e CREATE TABLE. Compatível com os dialetos MySQL, PostgreSQL e SQLite, com detecção automática do tipo de coluna (inteiro, decimal, texto). A conversão ocorre inteiramente no navegador; os dados nunca são enviados a um servidor.


Delimitador
Usar a primeira linha como cabeçalho
Nome da tabela
Dialeto SQL
Gerar também a instrução CREATE TABLE
Tratar valores vazios como NULL
Combinar linhas em uma única instrução INSERT


            
            Copiado!
            
          

Digite dados CSV para ver aqui o SQL gerado.

Como uma linha do CSV corresponde a uma instrução INSERT

Uma linha do CSV name,age,city
Instrução INSERT resultante INSERT INTO `my_table` (`name`, `age`, `city`) VALUES ('Alice', 30, 'Tokyo');

Quando a primeira linha é usada como cabeçalho, cada linha seguinte se torna uma instrução INSERT que nomeia as colunas do cabeçalho. Colunas detectadas como inteiro ou decimal são exibidas como números sem aspas, e as demais são exibidas como strings entre aspas simples.

Dicas

  • O tipo de cada coluna (inteiro, decimal, texto) é inferido automaticamente examinando todas as linhas de dados dessa coluna. Se mesmo um único valor não for numérico, a coluna inteira é tratada como tipo texto.
  • Ao ativar "Combinar linhas em uma única instrução INSERT", gera-se uma única instrução `INSERT INTO ... VALUES (...), (...), (...);`, reduzindo o número de execuções necessárias para carregar grandes conjuntos de dados.
  • O MySQL usa acento grave (`) para delimitar identificadores, enquanto PostgreSQL e SQLite usam aspas duplas ("). O estilo de aspas muda automaticamente conforme o dialeto SQL selecionado.
  • Ao desativar "Tratar valores vazios como NULL", as colunas de texto exibem strings vazias ('') e as colunas numéricas exibem NULL em seu lugar.

Perguntas frequentes

Cada valor dessa coluna em todas as linhas de dados é examinado: se todos forem inteiros, a coluna se torna INTEGER; se todos forem decimais, torna-se REAL; caso contrário (texto ou valores mistos), torna-se TEXT. Esse tipo detectado é usado diretamente na instrução CREATE TABLE gerada.

Sim. Ao selecionar PostgreSQL ou SQLite em "Dialeto SQL", as aspas de identificadores (aspas duplas) e os nomes de tipo são gerados de acordo com cada banco de dados respectivo.

Seguindo a convenção padrão de escape do SQL, as aspas simples são automaticamente duplicadas (''), de modo que a instrução resultante pode ser executada como está.

Não. Toda a conversão ocorre via JavaScript no seu navegador, e o conteúdo CSV inserido nunca é transmitido a nenhum servidor. É seguro usar mesmo com dados sensíveis.
ツールくん

Curiosidade — por que instruções INSERT combinadas são mais rápidas

A opção desta ferramenta para "combinar linhas em uma única instrução INSERT" (`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`) pode ser executada consideravelmente mais rápido do que emitir uma instrução INSERT por linha. Isso ocorre porque reduz a sobrecarga de analisar e planejar cada instrução SQL, além do custo das confirmações de transação que, do contrário, se repetiriam a cada instrução.

Dito isso, o MySQL possui um limite `max_allowed_packet`, e o PostgreSQL tem um limite semelhante no buffer de comunicação, portanto colocar linhas demais em uma única instrução INSERT pode ultrapassar esses limites e causar um erro. Na prática, dividir as instruções a cada algumas centenas ou milhares de linhas é a abordagem comum.

Carregar dados CSV em um banco de dados de teste costuma ser chamado de "seeding" nos fluxos de desenvolvimento, e muitos frameworks web — incluindo os seeders e factories do Laravel — oferecem mecanismos dedicados exatamente para essa tarefa. Um conversor rápido como este continua útil para verificações em pequena escala ou migrações de dados que não justificam montar toda essa infraestrutura.