MySQL 5.6.23, InnoDB
Estou carregando tabelas de arquivos de texto delimitados por caracteres usando o LOAD DATA INFILE
comando e gostaria que cada campo com um \N
, que é o NULL
caractere nessa configuração, colocasse um NULL
na tabela. Alguns tipos numéricos têm esse comportamento, enquanto outros colocam uma extensão 0
. Estou usando FIELDS TERMINATED BY
e algumas colunas obtêm NULL
valores corretamente, portanto, não é um problema de formato de linha fixa.
Estes são os tipos que observei durante os testes:
INT
insereNULL
sDECIMAL(x,0)
insereNULL
sDECIMAL(x,y)
insere0.0
sFLOAT
insere0
sDOUBLE(x,y)
insere0.0
sDOUBLE
insere0
s
Todas as colunas em questão são definidas com DEFAULT NULL
. Eu sei que várias funções podem converter esses 0
s em NULL
s. A questão é se existe um tipo de dados que pode lidar com precisão decimal e também inserir NULL
s no carregamento.
Além disso, vejo um monte de perguntas relacionadas ao mal-entendido da diferença entre uma string, uma string vazia e um valor nulo. ( exemplo exemplo exemplo ) Este não é o problema, pois os NULL
s estão lá e são carregados corretamente na mesma coluna quando eu o redefino como DECIMAL(x,0) e, incorretamente, quando definido como DECIMAL(x,3).
Resposta muito curta: Nenhum novo tipo de dados foi criado para acomodá-lo.
Enquanto estamos neste assunto
Vamos tentar SQL simples
Isto funciona ???
Tudo bem. Funciona com SQL. você está perguntando sobre
LOAD DATA INFILE
Você trouxe uma postagem que respondi: MySQL está inserindo "" como 0 em campos decimais. Como parar isso?
Vamos ver se esse bug foi corrigido desde que foi enviado. Vou tentar duplicar o código daquele bug que não funcionou.
Primeiro, vamos criar essa tabela a partir do relatório de bug
Em seguida, vamos fazer alguns dados
Vamos executar o LOAD DATA INFILE
ai o que aconteceu
Qual é o sql_mode?
Vamos apagar o sql_mode, truncar a tabela e recarregar
Deixe adulterar o arquivo de entrada
\N
como o relatório de bug tinhaVamos repetir tudo isso com InnoDB
Qual versão do MySQL estou usando???
E o Linux???
Entrando no mysql e tentando...
Data de hoje ???
Já se passou um ano e uma semana desde que o relatório de bug foi enviado e nada mudou.
My answer to MySQL is inserting "" as 0 in decimal fields. How to stop that? still stands as of today.
You need to do this test against MySQL 5.6.23 and see if something has changed.