2009-05-19 66 views
1

我們有一個大的製表符分隔的文本文件(大約120,000條記錄,50MB),我們試圖使用mysqlimport將其插入到MySQL中。有些字段用雙引號括起來,有些則不用。我們使用的是fields-optionally-enclosed-by='\"'開關,但問題是一些字段值本身包含雙引號(表示英寸),因此分隔的字段值可能是「ABCDEF19」「」。有意義嗎?mysqlimport和雙引號

我們沒有控制在文件的源文件中,所以我們不能改變那裏的格式,我嘗試刪除fields-optionally-enclosed-by開關,但是隨後雙引號括起來的值被導入。我們可以告訴mysqlimport有些字段可以用引號引起來,但是可能仍然包含引號嗎?我們可能會想到一個全局搜索和替換以避免字段值中的雙引號?或者其他任何其他字符值建議?

回答

1

您可以使用引號(字段 - 可選 - 封閉 - 切換開關將其導入),然後運行檢查,如果該值在開始和結尾處具有雙引號(假設沒有一個值在開頭處具有英寸)然後從開頭和結尾截取1個字符,以刪除從導入中獲得的額外引號。

編輯:在閱讀kekoav的迴應之後,我必須同意,如果你能夠在導入之前操作文件,這將是一個更聰明的選擇,但如果你被迫刪除後引號,你可以使用這樣的東西:

UPDATE table 
SET column = 
IF(
STRCMP(LEFT(table.column,1),'"'), 
MID(table.column,2,(LENGTH(table.column)-2)), 
table.column 
) 

在「表」

1

每一個「列」如果您的數據,包括現場報價的身體內沒有引號界定,不知怎的,你有問題。你不能保證mysqlimport能夠正確地做到這一點。

在嘗試以這種方式插入數據之前先按摩數據。

幸運的是,它是製表符分隔的,所以你可以運行一個正則表達式來用分隔的版本替換引號,然後告訴mysqlimport分隔符。