溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysq5.7.28配置innodb_page_size錯誤引起ERROR 1071 (42000)該怎么辦

發(fā)布時間:2021-10-08 17:18:25 來源:億速云 閱讀:106 作者:柒染 欄目:MySQL數(shù)據(jù)庫

mysq5.7.28配置innodb_page_size錯誤引起ERROR 1071 (42000)該怎么辦,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

  1. 幫客戶部署一套mysql并導(dǎo)入數(shù)據(jù)時出現(xiàn)ERROR 1071 (42000): Specified key was too long; max key length is 1536 bytes錯誤;

  2. 環(huán)境:數(shù)據(jù)庫版本:mysql5.7.28

              操作系統(tǒng):centos6.8

  3. 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è)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI