Specified key was too long; max key length is 767 bytes和Index column size too large.

參考自
https://segmentfault.com/p/1210000010686697/read
https://help.aliyun.com/knowledge_detail/41707.html

數據庫版本是mysql5.7.6
導入數據庫的時候報Specified key was too long; max key length is 767 bytes

我是按照https://segmentfault.com/p/1210000010686697/read來處理的
首先進入到mysql命令行

show variables like 'innodb_large_prefix'; 

show variables like 'innodb_file_format';


之後修改這兩個參數

set global innodb_large_prefix=1;
set global innodb_file_format=BARRACUDA;

這樣做的原因是

  • 啓用innodb_large_prefix參數能夠取消對於索引中每列長度的限制(但是無法取消對於索引總長度的限制)
  • 啓用innodb_large_prefix必須同時指定innodb_file_format=barracuda,innodb_file_per_table=true,並且建表的時候指定表的row_format爲dynamic或者compressed(mysql 5.6中row_format默認值爲compact)

這樣操作後在去執行導入數據的操作時錯誤內容變爲了

[Err] 1709 - Index column size too large. The maximum column size is 767 bytes.


出現這個錯誤的原因是:由於MySQL的Innodb引擎表索引字段長度的限制爲767字節,因此對於多字節字符集的大字段或者多字段組合,創建索引時會出現此錯誤。

以utf8mb4字符集字符串類型字段爲例,utf8mb4是4字節字符集,則默認支持的索引字段最大長度是191字符(767字節/4字節每字符≈191字符),因此在varchar(255)或char(255)類型字段上創建索引會失敗

關閉這個窗口後,查看當前已經導入的表數據,發現對應的表沒有問題,下拉剛剛的信息日誌,發現有某個表不存在,我就在導入的sql文件,對應那張表的創建語句上加了

ROW_FORMAT=DYNAMIC 

變成了這樣

之後再去執行就沒有錯了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章