CodeKitHub
Ferramentas JSON

Conversor de CSV para SQL

Última atualização:

Para transformar uma linha CSV em SQL, cada coluna torna-se um valor numa instrução INSERT INTO — os números ficam sem aspas, o texto é envolvido em aspas simples com as aspas internas duplicadas (O'Brien torna-se O''Brien), e as células vazias tornam-se NULL. Esta ferramenta aplica essa conversão a todo o seu arquivo CSV, inteiramente no seu navegador, com o nome de tabela que escolher e um escape de strings correto, pelo que as folhas de cálculo exportadas ou os despejos de bases de dados nunca saem do seu dispositivo.

O que é esta ferramenta?

Popular uma base de dados de testes, carregar a exportação de uma folha de cálculo numa tabela, ou migrar um pequeno conjunto de dados costuma começar da mesma forma: tem um arquivo CSV e precisa de SQL. Esta ferramenta analisa o seu CSV (usando a linha de cabeçalho como nomes de colunas) e constrói uma única instrução INSERT INTO cobrindo todas as linhas de dados, pronta a colar num cliente de base de dados.

Os valores de texto são envolvidos em aspas simples, com as aspas internas escapadas ao duplicá-las (assim O'Brien torna-se O''Brien), a regra de escape padrão partilhada por MySQL, PostgreSQL e SQLite. Uma célula CSV vazia é escrita com a palavra-chave SQL NULL em vez de uma string vazia — é uma escolha deliberada, já que uma célula em branco numa folha de cálculo normalmente significa «sem valor» e não «um texto vazio», e NULL é o que a maioria dos esquemas espera para isso.

Se um valor fica entre aspas ou não é decidido por uma heurística simples, não por uma verdadeira inferência de tipo: se a célula, sem espaços nas extremidades, parecer um número inteiro ou decimal (opcionalmente com um sinal de menos), é escrita sem aspas; tudo o resto — incluindo valores que apenas se parecem com números mas têm caracteres extra, como códigos postais com zeros à esquerda — é colocado entre aspas como texto. Isto mantém o resultado honesto: é um bom ponto de partida para uma importação pequena, não um substituto para validar os seus dados face ao esquema real da sua tabela antes de executar.

Fonte: a análise de CSV segue a RFC 4180, o que mais se aproxima de um padrão formal de CSV; a duplicação de aspas simples para escape de strings é a convenção partilhada documentada por MySQL, PostgreSQL e SQLite.

Por que usar?

  • Nome de tabela personalizável — defina-o uma vez e todas as linhas apontam para essa tabela.
  • Escape de strings correto — as aspas simples dentro dos valores são duplicadas para que o SQL não se quebre nem seja truncado.
  • Tratamento previsível de NULL — as células vazias tornam-se NULL em vez de uma string vazia, à semelhança de como a maioria das bases de dados distingue dados em falta.
  • Sintaxe SQL comum — o INSERT INTO ... VALUES ... gerado aqui funciona sem modificações no MySQL, PostgreSQL e SQLite.
  • 100% do lado do cliente — os seus dados CSV (que podem incluir registos de clientes ou dados de negócio) são analisados e convertidos no seu navegador e nunca carregados para lado nenhum.

Como usar

  1. Cole dados CSV com uma linha de cabeçalho, por exemplo, name,age\nAlice,30\nBob,25.
  2. Introduza o nome da tabela de destino (por defeito my_table).
  3. Clique em «Gerar SQL».
  4. Copie a instrução INSERT INTO ou descarregue-a como arquivo .sql, e execute-a na sua base de dados.

Exemplo

Entrada

name,age,city
Alice,30,
Bob,,NYC

Resultado

INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
  ('Alice', 30, NULL),
  ('Bob', NULL, 'NYC');

Repare que as células vazias se tornaram NULL (não strings vazias), e o valor numérico de age (30) ficou sem aspas enquanto cada valor de texto foi colocado entre aspas.

Dicas práticas

  • Popular uma base de dados de testes local: exporte uma pequena amostra como CSV a partir de uma folha de cálculo, converta-a aqui, e execute a instrução INSERT na sua base de dados de desenvolvimento.
  • Reveja sempre os tipos de coluna antes de executar o SQL gerado numa tabela real — esta ferramenta infere numérico versus texto com uma heurística simples, não com base no seu esquema real, pelo que uma coluna inteira que espera um formato específico pode necessitar de ajuste manual.
  • Se tiver milhares de linhas, a única instrução INSERT com várias linhas que esta ferramenta gera continua a ser SQL válido, mas instruções muito grandes podem ultrapassar o tamanho máximo de pacote de uma base de dados — divida primeiro o CSV em lotes mais pequenos se encontrar esse limite.

Por que razão NULL e não uma string vazia

Um erro comum ao escrever manualmente scripts de CSV para SQL é tratar cada célula em falta como uma string vazia ''. Isso é tecnicamente SQL válido, mas normalmente não significa o que pretende: uma coluna definida como inteiro rejeita '' redondamente, e mesmo numa coluna de texto, '' significa silenciosamente algo diferente de «não conhecemos este valor» na maioria das conceções de esquemas e consultas de relatórios (uma verificação WHERE coluna IS NULL não corresponderá a strings vazias, e vice-versa). Usar NULL para células em branco corresponde à semântica que a maioria das bases de dados e ORMs espera, e evita erros de tipo quando uma coluna numérica tem valores em falta em algumas linhas.

Perguntas frequentes

Isto funciona com qualquer base de dados SQL?

A sintaxe gerada — identificadores entre crases, valores de texto entre aspas simples, um INSERT INTO ... VALUES ... padrão — é comum ao MySQL, PostgreSQL e SQLite. O PostgreSQL não exige rigorosamente crases à volta dos identificadores (usa aspas duplas se for necessário entrecomilar), mas nomes entre crases também não causam problemas ali, desde que não tenha nomes de colunas invulgares que colidam com palavras reservadas. Não se segue aqui nenhum padrão SQL oficial único — apenas a sintaxe que funciona sem alterações nas bases de dados mais comuns.

Por que razão uma célula vazia se torna NULL em vez de uma string vazia ''?

É uma escolha de design deliberada: na maioria das exportações CSV reais, uma célula em branco significa que o valor é desconhecido ou não aplicável, e não literalmente um texto vazio. NULL é o que a maioria dos esquemas de bases de dados espera para isso. Se o seu caso de uso realmente precisar de strings vazias, terá de editar o SQL gerado manualmente para esses casos.

Como decide a ferramenta se um valor precisa de aspas?

É uma heurística simples, não uma verdadeira inferência de tipo: se uma célula, sem espaços nas extremidades, consistir apenas em dígitos (com um sinal de menos opcional no início e no máximo um ponto decimal), é escrita sem aspas como número. Tudo o resto é colocado entre aspas como texto. Isto significa que um código postal como 00501 ou um número de telefone só seria tratado como texto se tivesse caracteres extra — um zero inicial isolado ainda é interpretado como numérico aqui, por isso verifique identificadores como códigos postais e IDs antes de executar o SQL.

Os meus dados são carregados para algum lado?

Não. Tanto a análise como a geração de SQL ocorrem em JavaScript no seu navegador — nada é enviado para um servidor, o que torna seguro usar com registos de clientes ou de negócio exportados.

Pode lidar com valores CSV que contêm vírgulas ou aspas?

Sim. O CSV é analisado com um analisador de campos entre aspas adequado, que entende vírgulas, quebras de linha e aspas duplicadas dentro de campos entre aspas — não uma simples divisão por vírgulas — pelo que um campo como «Smith, John» é lido como um único valor, não dividido em duas colunas.

Ferramentas relacionadas