Eu tenho um arquivo que pode conter de 3 a 4 colunas de valores numéricos que são separados por vírgula. Os campos vazios são definidos com exceção quando estão no final da linha:
1,2,3,4,5
1,2,3,,5
1,2,3
A tabela a seguir foi criada no MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Campo Tipo | Nulo Chave Padrão | Extra | + ------- + -------- + ------ + ----- + --------- + ------- + | um | int (1) | SIM | NULL | | dois | int (1) | Sim | NULL | | três | int (1) | SIM | NULL | | quatro | int (1) | SIM | NULL | | cinco | int (1) | SIM | NULL | + ------- + -------- + ------ + ----- + --------- + ------- +
Estou tentando carregar os dados usando o comando MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
A tabela resultante:
+ ------ + ------ + ------- + ------ + ------ + | um | dois | três | quatro | cinco | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 3 4 | 5 | 1 | 2 3 0 5 | 1 | 2 3 NULL NULL + ------ + ------ + ------- + ------ + ------ +
O problema está no fato de que quando um campo está vazio nos dados brutos e não é definido, o MySQL, por algum motivo, não usa o valor padrão das colunas (que é NULL) e usa zero. NULL é usado corretamente quando o campo está ausente.
Infelizmente, eu tenho que ser capaz de distinguir entre NULL e 0 nesta fase, para que qualquer ajuda seja apreciada.
Obrigado S.
editar
A saída de SHOW WARNINGS:
+ --------- + ------ + -------------------------------- ------------------------ + | Nível | Código Mensagem | + --------- + ------ + -------------------------------- ------------------------ + | Aviso | 1366 Valor inteiro incorreto: '' para a coluna 'quatro' na linha 2 | | Aviso | 1261 Linha 3 não contém dados para todas as colunas | | Aviso | 1261 Linha 3 não contém dados para todas as colunas | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
. Consulte a seção de exemplos do d6tstack SQL sobre alterações no esquema de dados.