問題摘要:
何時嘗試執行以下操作查詢:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` ( ... KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
遇到錯誤:「#1071 - 指定的密鑰太長;最大密鑰長度為1000 位元組」。
解釋:
當索引中列的組合長度超過允許的最大鍵長度 1000 時,就會出現此錯誤位元組。在這種情況下,在 pds_core_menu_items 表上建立的索引包括四個欄位:parent_menu_id、menu_link、plugin 和 alias,長度分別為 32、255、255 和 255 位元組。
解決方案:
要解決此問題,請減少透過使用較短的列長度或限制索引中包含的列數來最佳化索引。
建議方法:
推薦方法是使用前綴索引來最佳化索引大小和效能。前綴索引涉及僅索引字串列的前幾個字元。這種方法可以顯著減少索引長度。
例如,以下修改後的查詢在四列中的每一列上建立一個前綴索引:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` ( ... KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
附加說明:
另外,值得注意的是查詢中的INT(1) 和INT(32) 資料類型不會影響列的儲存大小或值範圍。 INT 始終使用 4 個位元組的儲存空間,並允許從 -2147483648 到 2147483647 的值。數字參數可以影響顯示期間值的填充,除非使用 ZEROFILL,否則這是不相關的。
以上是為什麼 MySQL 回傳'Specified Key Was Too Long; Max Key Length is 1000 Bytes”,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!