MySQL - Gerando arquivos .csv com cabeçalho e acentuação diretamente de uma query no banco de dados
Já tratamos anteriormente de como gerar um arquivo a partir de uma consulta no MySQL porém não falamos especificamente de arquivos .CSV (aqueles separados por ponto e vírgula e que são reconhecidos diretamente pelos editores de planilha)
Além disso não tratamos também de como inserir um cabeçalho com os nomes dos campos e nem como esta saída ser gerada diretamente com acentuação, importante para nós que trabalhamos com o português.
Vamos começar com nosso exemplo padrão
Para DOS
Para Linux
As queries acima geram arquivos com acentuação no padrão UTF8, fora do padrão .csv e sem cabeçalho.
Vamos transformar as queries acima para que a saída esteja no padrão .csv
'Fields enclosed by' define qual caractere envolverá os dados dos campos, 'Terminated by' define em que ponto um campo termina e outro começa e 'Lines terminated by' define o caractere que informa o final de uma linha.
Porém a acentuação neste caso não será exibida da forma que desejamos, pois a codificação vem como UTF8. Para acertar este detalhe vamos modificar novamente nossa querie.
'Character Set latin1' gera o arquivo com acentuação no formato correto.
Agora falta colocarmos um cabeçalho no arquivo de saída com os nomes dos campos.
SELECT 'campo1','campo2','campoN' cria uma saída 'fake' em texto com os nomes dos campos. Union All junta esta saída à próxima que é a nossa SELECT campo1, campo2, campoN FROM tabela.
Apenas lembrando que ao juntar duas queries com UNION as quantidades de campos devem coincidir.
Caso uma querie tenha mais campos que a outra o MySQL retorna erro.
Por hoje é isso
Além disso não tratamos também de como inserir um cabeçalho com os nomes dos campos e nem como esta saída ser gerada diretamente com acentuação, importante para nós que trabalhamos com o português.
Vamos começar com nosso exemplo padrão
Para DOS
SELECT * INTO OUTFILE 'C:/diretorio/arquivo.txt' FROM tabela
Para Linux
SELECT * INTO OUTFILE '/diretorio/arquivo.txt' FROM tabela
As queries acima geram arquivos com acentuação no padrão UTF8, fora do padrão .csv e sem cabeçalho.
Vamos transformar as queries acima para que a saída esteja no padrão .csv
SELECT * FROM tabela
INTO OUTFILE 'C:/diretorio/arquivo.csv'
FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
'Fields enclosed by' define qual caractere envolverá os dados dos campos, 'Terminated by' define em que ponto um campo termina e outro começa e 'Lines terminated by' define o caractere que informa o final de uma linha.
Porém a acentuação neste caso não será exibida da forma que desejamos, pois a codificação vem como UTF8. Para acertar este detalhe vamos modificar novamente nossa querie.
SELECT * FROM tabela
INTO OUTFILE 'C:/diretorio/arquivo.csv'
CHARACTER SET latin1
FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
'Character Set latin1' gera o arquivo com acentuação no formato correto.
Agora falta colocarmos um cabeçalho no arquivo de saída com os nomes dos campos.
SELECT 'campo1','campo2','campoN'
UNION ALL
SELECT campo1,campo2,campoN FROM tabela
INTO OUTFILE 'C:/diretorio/arquivo.csv'
CHARACTER SET latin1
FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
SELECT 'campo1','campo2','campoN' cria uma saída 'fake' em texto com os nomes dos campos. Union All junta esta saída à próxima que é a nossa SELECT campo1, campo2, campoN FROM tabela.
Apenas lembrando que ao juntar duas queries com UNION as quantidades de campos devem coincidir.
Caso uma querie tenha mais campos que a outra o MySQL retorna erro.
Por hoje é isso
Coisa linda, era tudo o que eu precisava =D
ResponderExcluirDa para salvar cada query em uma aba do excel? tem esse comando?
ResponderExcluirmuito obrigado
ResponderExcluir