Estou selecionando dados de um banco de dados no servidor A, despejando a saída em um arquivo localmente e, em seguida, fazendo um LOAD DATA INFILE em meu banco de dados local. O comando bash é mais ou menos assim:
mysql -e "SELECT * FROM items WHERE created_at > '2011-05-01';" > items
Disseram-me que essa era a maneira correta de mover dados de um servidor externo para um banco de dados local. Acho que normalmente teria escolhido usar mysqldump, mas não queria me preocupar em enrolar o arquivo despejado do servidor para minha máquina local.
Os dados que são despejados no arquivo de itens com o código de linha de comando acima contêm muitos NULLs. Esses NULLs, quando lidos pelo comando LOAD DATA INFILE, executados localmente, acabam carregando um monte de strings de "NULL" na minha tabela. Eu quero que eles sejam traduzidos corretamente para NULL sem ter que entrar no arquivo de itens e localizar/substituir "NULL" por "\N"
Eu preciso de uma maneira de fazer uma de duas coisas:
1) Ao selecionar dados de uma tabela mysql, gostaria que a saída escapasse de NULLS para a string padrão \N que é lida por LOAD DATA INFILE. No interesse da concisão e facilidade de manutenção, quero evitar o tipo de código abaixo.
SELECT IFNULL(x, '\N' ) AS x, IFNULL(y, '\N') AS y ...
2) Ao executar um LOAD DATA INFILE, gostaria que tratasse a string NULL como nula.
(SELECT * FROM items WHERE created_at > '2011-01-01')
Quaisquer pensamentos ou métodos alternativos são muito apreciados.
Muito obrigado, Chade
Você já olhou para a sintaxe SELECT INTO OUTFILE ?
Aqui está uma citação sobre o problema da string NULL:
Portanto, certifique-se de indicar uma
FIELDS ESCAPED BY
cláusula para obter NULLs escritos como \NEspero que isto ajude