列数较多的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)有可能是原始數據的問題。由前兩點可以看出還是要在基本了解軟件操作或代碼操作的基礎上再進行工作,不然出錯了都不知道從哪入手。
2022年更新
回看這篇博文,我現在想到了解決方案,就是修改原數數據的組織方式。
原始數據中type是各個類別,data hour表示時間。
可以將一個類別存為一張表,在這張表中所有站點存為1列。
總結
以上是生活随笔為你收集整理的列数较多的csv文件导入mysql数据库(过程及问题记录)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql可视化工具-navicat的下
- 下一篇: excel操作技巧记录(实时更新)