將DataFrame數據保存到mysql中時,出現錯誤提示:
BLOB/TEXT column used in key specification without a key lengthmysql
出問題的緣由是DataFrame對象索引的數據類型是TEXT/BLOB或其從屬的類型,當將其做爲mysql中的主鍵的時候,若是這些數據類型缺乏明確的長度值,mysql沒法保證主鍵的惟一性,由於這個主鍵是一個變量,其長度是動態的。因此當使用 TEXT/BLOB類型的數據做爲索引的時候,數據的長度必須提供給mysql,使其可以明確鍵的長度。可是mysql不支持對TEXT/BLOB長度的限制。sql
一樣的錯誤也會出如今試圖將非TEXT/BLOB類型的數據列轉換成TEXT/BLOB類型,這些列被定義成獨立的索引。AlterTable命令會失效。spa
解決這個問題的方式之一是捨棄TEXT/BLOB列做爲索引,或者設置另外的列做爲主鍵。若是不得不設置成主鍵,而想限制TEXT/BLOB的長度,能夠嘗試使用VARCHAR並設置其長度。VARCHAR默認長度是255個字符,而且其長度必須在其聲明以後在其括號中設置,例如,VARCHAR(200)將其設置成200個字符長度。code
將DataFrame數據輸出到mysql時強制將索引轉換成VARCHAR並限制其長度,其中的code是索引的標籤:對象
1 data.to_sql('data',engine,if_exists='replace',dtype={'code':VARCHAR(data.index.get_level_values('code').str.len().max())})
http://stackoverflow.com/questions/38522513/can-pandas-with-mysql-support-text-indexesblog
http://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length索引