參考自
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
變成了這樣
之後再去執行就沒有錯了