Pergunta

Estou tentando importar um .csv em uma tabela MySQL através de phpMyAdmin .

O arquivo .csv é separado por pipes, formatado como este:

data|d'ata|d'a"ta|dat"a|
data|"da"ta|data|da't'a|
dat'a|data|da"ta"|da'ta|

Os dados contém aspas. Eu não tenho nenhum controle sobre o formato em que eu recebo os dados - é gerado por terceiros

.

O problema surge quando há um | seguido por um aspas duplas . Eu sempre obter uma "contagem de campo inválida na entrada CSV na linha N" de erro.

Estou carregar o arquivo da página de importação, usando Latin1, CSV, denunciado por |., Separados por"

Eu gostaria apenas de alterar o "fechado pelo" caráter , mas eu continuo recebendo "Parâmetro inválido para importação CSV: Campos fechado por" . Eu tentei vários personagens sem sucesso.

Como posso dizer ao MySQL para aceitar este formato no phpMyAdmin?

A configuração dessas mesas é o primeiro passo para escrever um programa que irá usar enviados gzipped arquivos .csv para manter o catálogo de um site de e-commerce.

Foi útil?

Solução

Eu tenho tido um problema semelhante para as últimas horas e eu finalmente obtido uma importação para o trabalho, então eu vou compartilhar minha solução, mesmo que ele não pode ajudar o poster original.

A versão curta:
1.) se um arquivo Excel, salvar como ODS formato (aberto documento de planilha). 1a.) Se o arquivo é um tipo de formato de texto com delimitadores (como o cartaz original tem), em seguida, abra o Excel, e uma vez dentro do arquivo uso Excel / Open para abrir o arquivo. Lá você será capaz de selecionar o delimitador apropriado para exibir o arquivo. Certifique-se os olhares de arquivo bem, em seguida, salvar como formato de ODS (e fechar o arquivo).

2.) Abra o arquivo no OpenOffice Calc (download gratuito da Oracle / Sun). 2a.) Pressione Ctrl-F para abrir a caixa de diálogo Localizar. Clique em Mais opções e certifique-se "Somente seleção atual" não está marcada. 2b.) Pesquisa por aspas duplas. Se não houver nenhum no seu arquivo, você pode ignorar as etapas 4 e 5.
3.) Salvar como -> Texto CSV. Selecione as opções para o formato UTF-8 (press "u" 3 vezes para chegar lá mais rápido), selecione ";" (Ponto e vírgula) como separador, e selecione aspas duplas para o texto. 4.) Se houvesse qualquer aspas encontrada em seu arquivo na etapa 2b, continue, caso contrário, apenas importar o arquivo como CSV com o phpMyAdmin (veja o passo 6). Ele deve funcionar. 5a) Abrir no Word ou qualquer outro editor de texto onde você pode fazer Pesquisar -.> Substituir Tudo
. 5b.) Procurar todas as instâncias de três aspas duplas em uma fileira procurando por """(se você encontrar qualquer, você pode até querer procurar 4, 5, 6 etc. em uma linha até que você venha vazio). 5-C.) Substitua o """ com um espaço reservado que não é encontrado em qualquer outro lugar em sua csv. Eu substituí-los com 'abcdefg'. . 5d) Encontrar -> Substitua todas as ocorrências de "" (duas aspas duplas em uma fileira) com \"(barra e aspas duplas). . 5e) Encontrar -> Substituir todas as instâncias de abcdefg (ou o seu espaço reservado escolhido a partir do passo 5c) com \ "". 5c e esta etapa garantir que qualquer cotações que ocorrem no final de um campo pouco antes da citação-delimitando texto são corretamente 'escapou'. 5F). Finalmente, salve o arquivo, tendo em UTF-8 (ou qualquer formato que você precisa para importação). 6.a) No phpMyAdmin, clique na guia "importar", clique no botão "Escolher arquivo" e selecione o arquivo que você acabou de salvar. 6b.) Sob 'Formato de arquivo importado' CSV deve ser selecionada. Se os nomes das colunas estão na primeira linha, certifique-se de que a caixa está marcada. Mais importante ainda, 'Campos terminados por' deve ser definido como; (Ponto e vírgula), 'campos delimitados por' deve ser definido como "(aspas duplas), e 'Campos escapou por' deve ser definido como \ (barra). Você configurar isso no seu arquivo, seguindo o passo 3, e se necessário seguindo os passos 5a -. 5f

7). Clique em "Go" e rezo para que você não apenas desperdiçar mais uma hora.

Agora que a versão curta acabou por tanto tempo, eu vou pular a versão longa.

Basta dizer, parece haver 2 grandes problemas com a importação através do phpMyAdmin. 1.) Há algum tipo de problema de memória que impede grandes arquivos do Excel e ODS (quão grande é grande? Não tenho certeza ainda) que está sendo importado. 2.) Nem OpenOffice nem Excel parecem salvar seus arquivos CSV de uma forma que seja compatível com o phpMyAdmin. Eles querem escapar aspas com aspas duplas. phpMyAdmin quer aspas escapou com outra coisa, como barra.

O primeiro problema venha a ser corrigido em uma atualização de phpmyadmin (e / ou o Excel importação add-on 'PHPExcel'). O segundo poderia ser corrigido se houvesse uma maneira fácil de alterar o caractere de escape para o Excel ou ODS arquivos salvos como CSV, ou se phpMyAdmin poderia ser compatível com seu formato (que deve realmente ser muito fácil. Simplesmente tem que executar a mesma encontrar-substituir as ações que realizamos manualmente acima para contornar o problema de aspas duplas).

Espero que isso ajude alguém, como eu passei 3-4 horas descobrindo esta solução e outra hora de escrevê-lo aqui. Eu espero que não seja muito longo, mas eu estava esperando para ajudar as pessoas em todos os níveis de experiência de zero a wherever eu sou (provavelmente em torno de 0,1).

Outras dicas

Eu encontrei um hack que as obras - Eu uso o $ como o "fechado pelo" caráter e está tudo bem. Uma vez que este é um site europeu, eu sei que nunca vou usá-lo no conteúdo da tabela.

você pode modificar os arquivos CSV, adicionando um \ na frente de cada "direito?

Você já tentou anulando as caixas que dizia "Campos fechados por" e "Campos escapou pelo"? Eu não usei phpMyAdmin, mas o Google sugere outros tiveram sucesso com este método .

Você pode considerar apenas escrever seu próprio CARGA DATA INFILE consulta, parece que você vai precisar de um de qualquer maneira uma vez que este processo será parte de um aplicativo em algum ponto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top