列數較多的csv檔案匯入mysql資料庫(過程及問題記錄)
剛接觸mysql,想把幾個表匯入到資料庫中,結果就遇到了問題。
原始資料是這樣的:
1、使用navicat報錯:
[ERR] Cannot create table[china_sites_20140516]: 1118 - Row size too large. The maximum row size for theused table type, not counting BLOBs, is 65535. This includes storage overhead,check the manual. You have to change some columns to TEXT or BLOBs
按照這個報錯的解決方法是:在這一步手動一個個將type改為text或blob,但表格有近千列…
在群裡諮詢了下,有人給出這樣的解決方案:先定義一個遊標,讀出所有表名,然後用動態sql語句,改變欄位型別。但是我還沒有試這種方式。
2、使用mysql的load data infile:
先是新建了一個表,由於待匯入的表有近千列,也就是有近千個屬性欄位,我在新建表格時,只新建了一個欄位。
然後,用下面語句匯入:
LOAD DATA local INFILE "E:\test.csv"
replace INTO TABLE test
CHARACTER SET gbk
FIELDS TERMINATED BY ","
ENCLOSED BY ""
LINES TERMINATED BY "\r\n"
IGNORE 1 LINES;
結果沒報錯但出了警告,表格沒匯入成功:
| Warning | 1262 | Row 1 was truncated; itcontained more data than there were input columns
這句話的意思是匯入的表格列數超標,被截斷了。
估計是新建表格,只新建了一列的原因,但我不能手動新建近千列欄位呀。
3、不完美的解決方案
試著將資料進行縮減,只保留必要資料,然後用navicat向mysql資料庫中匯入資料。把資料縮減之後,列數還是很多,在匯入時還是會報上面的錯誤,經過觀察發現縮減後的資料經過轉置之後只有24列,我就把縮減的資料轉置後進行匯入,成功了。我接著把原始資料也進行了轉置,但轉置之後也報錯,估計還是列數太多了,因為原始資料轉置之後也有340列。
4、總結
雖然這個問題,目前沒有解決,但我想總結下以後遇到這種摸不著頭緒的問題的解決思路。不然像這次我在網上找了各種方法,也實驗了各種方法,但都不奏效,一天下來,自己腦袋都暈了。1)藉助報錯資訊,發現問題所在。這點是比較重要的,我剛開始不懂得看報錯資訊,也不知道從哪裡找報錯資訊,一直納悶哪裡出錯了。2)回顧下,軟體操作是否正確,程式碼輸入是否符合語法規則。3)有可能是原始資料的問題。由前兩點可以看出還是要在基本瞭解軟體操作或程式碼操作的基礎上再進行工作,不然出錯了都不知道從哪入手。