如何將CSV文件導入MySQL表
我有一個未規范化的事件-來自客戶端的日記CSV,我試圖將它加載到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?CSVIm
port?Date50?ADD?COLUMN?Date50?VARCHAR(256);
表上沒有約束,所有字段都保存VARCHAR(256)值,但包含計數(由int表示)、是/否(用位表示)、價格(用十進制表示)和文本縮略語(用文本表示)的列除外。
我試圖將數據加載到文件中: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:?198256SELECT?*?FROM?CSVImport;|?NULL?????????????|?NULL????????|?NULL
|?NULL?|?NULL???????????????|?...
整張桌子都裝滿了NULL.
我認為問題在于,文本信息包含多行,MySQL正在解析文件,好像每一行新行都對應于一個數據庫行一樣。我可以毫無問題地將文件加載到OpenOffice中。
csv文件包含2593行和570條記錄。第一行包含列名。我認為它是逗號分隔的,文本顯然是用雙引號分隔的。
最新情況:
我將一些信息添加到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記錄,而且所有加載的數據似乎都在正確的位置。