Arahan LOAD MySQL menawarkan kaedah mudah untuk mengimport data daripada fail CSV ke dalam jadual. Walau bagaimanapun, apabila memuatkan data berangka daripada fail CSV yang mengandungi medan kosong, MySQL cenderung untuk memasukkan sifar dan bukannya NULL, walaupun apabila lajur ditakrifkan sebagai boleh dibatalkan.
Pertimbangkan fail CSV berikut (testdata.txt):
1,2,3,4,5 1,2,3,,5 1,2,3
Dan jadual MySQL berikut (moo):
CREATE TABLE moo ( one INT(1) NULL, two INT(1) NULL, three INT(1) NULL, four INT(1) NULL, five INT(1) NULL );
Apabila memuatkan CSV data ke dalam jadual moo menggunakan arahan LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";
Jadual yang terhasil akan mengandungi:
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
Seperti yang anda boleh perhatikan, MySQL memberikan sifar kepada medan kosong, yang tidak betul apabila lajur membenarkan nilai NULL.
Untuk menangani isu ini dan memastikan medan kosong dikendalikan dengan betul sebagai NULL, gunakan Fungsi NULLIF(). NULLIF() mengambil dua argumen: medan yang akan diperiksa dan nilai untuk dikembalikan jika medan itu kosong. Begini cara menggunakannya:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (one, two, three, @vfour, five) SET four = NULLIF(@vfour,'') ;
Dalam contoh ini, medan keempat dibaca ke dalam pembolehubah setempat @vfour. Pernyataan SET kemudiannya menetapkan empat kepada NULL jika @vfour ialah rentetan kosong.
Jika berbilang medan boleh kosong, baca semuanya ke dalam pembolehubah setempat dan gunakan berbilang pernyataan SET:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (@vone, @vtwo, @vthree, @vfour, @vfive) SET one = NULLIF(@vone,''), two = NULLIF(@vtwo,''), three = NULLIF(@vthree,''), four = NULLIF(@vfour,'') ;
Dengan memanfaatkan NULLIF(), MySQL LOAD kini boleh mengendalikan medan kosong dengan betul dan memberikan nilai NULL, membolehkan anda bekerja dengan tepat dengan data dalam anda Jadual MySQL.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Nilai NULL Daripada Sifar Apabila Mengimport Data CSV dengan Medan Kosong ke dalam MySQL Menggunakan LOAD DATA INFILE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!