ฉันมีไฟล์ที่สามารถมีคอลัมน์ตั้งแต่ 3 ถึง 4 คอลัมน์ของค่าตัวเลขซึ่งคั่นด้วยเครื่องหมายจุลภาค เขตข้อมูลว่างถูกกำหนดด้วยข้อยกเว้นเมื่อพวกเขาอยู่ในตอนท้ายของแถว:
1,2,3,4,5
1,2,3,,5
1,2,3
ตารางต่อไปนี้ถูกสร้างขึ้นใน MySQL:
+ ------- + -------- + ------ + ----- + --------- + ------- + | ฟิลด์ | ประเภท | ว่างเปล่า คีย์ | เริ่มต้น | พิเศษ | + ------- + -------- + ------ + ----- + --------- + ------- + | หนึ่ง | int (1) | ใช่ | | NULL | | | สอง | int (1) | ใช่ | | NULL | | | สาม | int (1) | ใช่ | | NULL | | | สี่ | int (1) | ใช่ | | NULL | | | ห้า | int (1) | ใช่ | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
ฉันพยายามโหลดข้อมูลโดยใช้คำสั่ง MySQL LOAD:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
ตารางผลลัพธ์:
+ + ------ ------ ------- + + + ------ ------ + | หนึ่ง | สอง | สาม | สี่ | ห้า | + + ------ ------ ------- + + + ------ ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + + ------ ------ ------- + + + ------ ------ +
ปัญหาอยู่ที่ความจริงที่ว่าเมื่อเขตข้อมูลว่างเปล่าในข้อมูลดิบและไม่ได้กำหนดไว้ MySQL ด้วยเหตุผลบางอย่างไม่ได้ใช้ค่าเริ่มต้นคอลัมน์ (ซึ่งเป็นค่า NULL) และใช้ศูนย์ ค่า NULL ถูกใช้อย่างถูกต้องเมื่อไม่มีฟิลด์ทั้งหมด
น่าเสียดายที่ฉันต้องแยกความแตกต่างระหว่าง NULL และ 0 ในขั้นตอนนี้ดังนั้นความช่วยเหลือใด ๆ จะได้รับการชื่นชม
ขอบคุณ S.
แก้ไข
ผลลัพธ์ของ SHOW WARNINGS:
+ --------- + ------ + -------------------------------- ------------------------ + | ระดับ | รหัส | ข้อความ | + --------- + ------ + -------------------------------- ------------------------ + | คำเตือน | 1366 | ค่าจำนวนเต็มไม่ถูกต้อง: '' สำหรับคอลัมน์ 'สี่' ที่แถว 2 | | คำเตือน | 1261 | แถว 3 ไม่มีข้อมูลสำหรับคอลัมน์ทั้งหมด | | คำเตือน | 1261 | แถว 3 ไม่มีข้อมูลสำหรับคอลัมน์ทั้งหมด | + --------- + ------ + -------------------------------- ------------------------ +
LOAD DATA
ซึ่งสอดคล้องคอลัมน์ทั้งหมดก่อนที่จะใช้ ดูส่วนd6tstack ตัวอย่าง SQLเกี่ยวกับการเปลี่ยนแปลงคีมาข้อมูล