我有一個很大的.csv文件,我想將其導入到MySQL數據庫中。我想根據其速度使用LOAD DATA INFILE
聲明。LOAD DATA INFILE - 以字符結尾的字段也出現在字段
字段終止於-|-
。行由|--
終止。目前我使用下面的語句:
LOAD DATA LOCAL INFILE 'C:\\test.csv' INTO TABLE mytable FIELDS TERMINATED BY '-|-' LINES TERMINATED BY '|--'
大多數行看起來像這樣:(注意字符串不被任何字符括起來)
goodstring-|--|-goodstring-|-goodstring-|-goodstring|--
goodstring-|--|-goodstring-|-goodstring-|-|--
goodstring-|-goodstring-|-goodstring-|-goodstring-|-|--
goodstring
是不包含字符串作爲角色的-
。正如你所看到的,第二列或最後一列可能是空的。像上面這樣的行不會導致任何問題。但最後一列可能包含-
個字符。有可能是一排看起來是這樣的:
goodstring-|--|-goodstring-|-goodstring-|---|--
在最後一列的字符串--
會導致問題。 MySQL檢測六個而不是五個列。它將單個-
字符插入第五列並截斷第六列。正確的DB行應該是("goodstring", NULL, "goodstring", "goodstring", "--")
。
解決辦法是告訴MySQL在第四個字段被終止後作爲第fith列的一部分(直到行終止)。這可能與LOAD DATA INFILE
?是否有產生相同結果的方法,不需要編輯源文件並執行的速度可快到LOAD DATA INFILE
?
「是否可以告訴MySQL將第四個字段之後的所有內容都視爲第五列?」是的,按照[此博客文章](http://ideacode.com/content/mysql-csv-load-fu)上的SET fifthColumn = CONCAT(@ fifthField,@ sixthField)行。 – bishop
我們通常使用'FIELDS TERMINATED BY'¿^?fish╔&®)'' – Drew
謝謝@主教!那篇博文正是我所需要的。 – ByteBullet