ฉันมีเหตุการณ์ที่ผิดปกติ - CSV CSV จากลูกค้าที่ฉันพยายามโหลดลงในตาราง MySQL เพื่อให้ฉันสามารถ refactor ในรูปแบบสติ ฉันสร้างตารางชื่อ 'CSVImport' ซึ่งมีหนึ่งฟิลด์สำหรับทุกคอลัมน์ของไฟล์ CSV CSV มี 99 คอลัมน์ดังนั้นนี่จึงเป็นงานที่ยากพอตัว:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
ไม่มีข้อ จำกัด ในตารางและเขตข้อมูลทั้งหมดมีค่า VARCHAR (256) ยกเว้นคอลัมน์ที่มีจำนวน (แทนด้วย INT), ใช่ / ไม่ใช่ (แทนด้วย BIT), ราคา (แสดงโดย DECIMAL) และข้อความว่างเปล่า ( แสดงโดย TEXT)
ฉันพยายามโหลดข้อมูลลงในไฟล์:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
NULL
ตารางทั้งเต็มไปด้วย
ฉันคิดว่าปัญหาคือข้อความผิดพลาดมีมากกว่าหนึ่งบรรทัดและ MySQL แยกวิเคราะห์ไฟล์ราวกับว่าแต่ละบรรทัดใหม่จะสอดคล้องกับหนึ่งแถว databazse ฉันสามารถโหลดไฟล์ลงใน OpenOffice ได้โดยไม่มีปัญหา
ไฟล์ clientdata.csv มี 2593 บรรทัดและ 570 รายการ บรรทัดแรกมีชื่อคอลัมน์ ฉันคิดว่ามันคั่นด้วยจุลภาคและเห็นได้ชัดว่าข้อความคั่นด้วย doublequote
UPDATE:
หากมีข้อสงสัยให้อ่านคู่มือ: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
ฉันเพิ่มข้อมูลลงในLOAD DATA
คำสั่งที่ OpenOffice ฉลาดพอที่จะอนุมานได้และตอนนี้มันโหลดจำนวนเร็กคอร์ดที่ถูกต้อง:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
แต่ยังมีNULL
ระเบียนจำนวนมากและไม่มีข้อมูลใดที่ถูกโหลดดูเหมือนว่าจะถูกที่แล้ว