मेरे पास एक ग्राहक से एक अप्राकृतिक घटना-डायरी सीएसवी है जिसे मैं एक MySQL तालिका में लोड करने की कोशिश कर रहा हूं ताकि मैं एक समझदार प्रारूप में रिफ्लेक्टर कर सकूं। मैंने '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 फाइल को पार्स कर रहा है जैसे कि प्रत्येक नई लाइन एक डेटाबेस पंक्ति के अनुरूप होगी। मैं एक समस्या के बिना OpenOffice में फ़ाइल लोड कर सकता हूं।
Clientdata.csv फ़ाइल में 2593 लाइनें और 570 रिकॉर्ड हैं। पहली पंक्ति में कॉलम नाम शामिल हैं। मुझे लगता है कि यह अल्पविराम सीमांकित है, और पाठ जाहिरा तौर पर doublequote के साथ सीमांकित है।
अपडेट करें:
जब संदेह हो, तो मैनुअल पढ़ें: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
मैंने इस LOAD DATA
कथन में कुछ जानकारी जोड़ी थी कि ओपनऑफ़िस का अनुमान लगाने के लिए पर्याप्त स्मार्ट था, और अब यह सही संख्या में रिकॉर्ड लोड करता है:
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
रिकॉर्ड हैं, और जो भी डेटा लोड किया गया है वह सही जगह नहीं है।