Gostaria de entender como criar um arquivo de backup decente usando mysql
e mysqlimport
. Eu sei que posso usar mysqldump
e mysql
, mas estou aprendendo a usar a combinação: mysql
e mysqlimport
.
Estou no mysql5.7.21 no Windows 10. Tenho tabela de teste: aeronaves que se parece com isso:
Gostaria de exportar esta tabela para um arquivo texto através da mysql
ferramenta cliente. Então eu faço isso:
mysql -h localhost -u root -D julian -p -e "SELECT * FROM `aircrafts` " > aircrafts.txt
Isso cria o arquivo de backup e o conteúdo dele é:
id countryFactoryID name type price
1 1 Cessna 172 Skyhawk GA 60000
2 43 Diamond DA40 GA NULL
3 1 Cirrus SR20 GA NULL
4 1 Piper PA-28 Cherokee GA NULL
5 1 Beechcraft A23 Musketeer GA NULL
6 1 Grumman American AA-5 Traveller GA NULL
O que notei sobre o arquivo de backup é que ele usa NULL
em vez de \N
.
Mas tudo bem, eu acho.
Em seguida, importo o arquivo de backup assim:
mysqlimport --local -l -v --ignore-lines=1 -p -u root myDB aircrafts.txt
A saída na CLI é:
Connecting to localhost
Selecting database myDB
Locking tables for write
Loading data from LOCAL file: aircrafts.txt into aircrafts
myDB.aircrafts: Records: 6 Deleted: 0 Skipped: 0 Warnings: 6
Disconnecting from localhost
Ok, até agora tudo bem.
Quando olho no phpmyadmin, vejo isso:
Como você pode ver, o preço é 0
, mas eu gostaria de ter um valor NULL, como na primeira imagem. É estranho porque meu valor padrão para o preço da coluna é NULL.
O que estou fazendo errado?
Este problema é causado pela forma como o MySQL LOAD DATA lida com NULLs:
No seu caso, NULL é considerado como a palavra 'NULL' e se você tentar converter 'NULL' para number, ele retornará 0. Você precisa alterar NULL para \N ou incluir strings usando algum caractere.
Eu tentei a resposta de Nikita. Então eu usei o comando mysql assim:
O resultado foi:
Bem... não é isso que eu quero; a fuga é errônea.
Então eu tive que usar
SELECT ... INTO OUTFILE
.O conteúdo de aeronaves.txt:
Uau funciona!
Leia mais sobre isso aqui:
https://medium.com/@julek23/how-to-create-an-database-export-with-select-into-outfile-f10983a22db1