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