您好,登錄后才能下訂單哦!
mysq5.7.28配置innodb_page_size錯誤引起ERROR 1071 (42000)該怎么辦,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
幫客戶部署一套mysql并導入數據時出現ERROR 1071 (42000): Specified key was too long; max key length is 1536 bytes錯誤;
環境:數據庫版本:mysql5.7.28
操作系統:centos6.8
CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( -> `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, -> `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, -> `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, -> `BLOB_DATA` blob NULL, -> PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, -> CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT -> ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'InnoDB free: 504832 kB; (`SCHED_NAME` `TRIGGER_NAME` `TRIGGE' ROW_FORMAT = Dynamic; ERROR 1071 (42000): Specified key was too long; max key length is 1536 bytes
4.查詢官方文檔該錯誤是由系統變量innodb_large_prefix(默認啟用,注意實驗版本為MySQL 5.6.41,默認是關閉的,
MySQL 5.7默認開啟),則對于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引鍵前綴限制為3072字節。如果禁用
innodb_large_prefix,則對于任何行格式的表,索引鍵前綴限制為767字節。
nnodb_large_prefix將在以后的版本中刪除、棄用。在MySQL 5.5中引入了innodb_large_prefix,用來禁用大型前綴索引,
以便與不支持大索引鍵前綴的早期版本的InnoDB兼容。
對于使用REDUNDANT或COMPACT行格式的InnoDB表,索引鍵前綴長度限制為767字節。例如,您可能會在TEXT或VARCHAR列上使
用超過255個字符的列前綴索引達到此限制,假設為utf8mb3字符集,并且每個字符最多包含3個字節。
嘗試使用超出限制的索引鍵前綴長度會返回錯誤。要避免復制配置中出現此類錯誤,請避免在主服務器上啟用
enableinnodb_large_prefix(如果無法在從服務器上啟用)。
適用于索引鍵前綴的限制也適用于全列索引鍵。
注意:上面是767個字節,而不是字符,具體到字符數量,這就跟字符集有關。GBK是雙字節的,UTF-8是三字節的
5.官方提供解決方案:
1: 系統變量innodb_large_prefix為ON 2: 系統變量innodb_file_format為Barracuda 3: ROW_FORMAT為DYNAMIC或COMPRESSED
6.經測試改變上述三個參數依然無法解決報錯問題,但是嘗試默認安裝的無配置文件部署mysql是可以正常創建,判斷是由
配置文件引起的無法創建表問題,經過測試發現配置文件中innodb_page_size參數配置大小為8192,而默認配置 大小
是16384,調整該參數至16384問題解決。
7.上述創建語句中外鍵索引所需字節大小為(120+200+200)*3=1560,但是為何page頁改為16k就沒問題 ,沒有找到直觀的證據,暫未可知(推測應該是頁大小和索引行長度的關系,16k的頁對應3072,8k的頁對應1536)
看完上述內容,你們掌握mysq5.7.28配置innodb_page_size錯誤引起ERROR 1071 (42000)該怎么辦的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。