在建立帶有複合索引的MySQL 表時,使用者可能會遇到錯誤「指定的密鑰太長;最大密鑰長度為1000 位元組」。此錯誤表示索引列的組合長度超過了允許的最大儲存大小 1000 位元組。
提供的程式碼片段中的問題在於索引複合索引的長度過大:
KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
要解決此錯誤,請考慮以下內容:
1。最佳化索引長度:
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
2.確定最佳前綴長度:
使用以下查詢來確定給定列的最佳前綴長度:
SELECT ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10, ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20, ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50, ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100 FROM `pds_core_menu_items`;
例如,如果查詢回傳:
+---------------+---------------+---------------+----------------+ | pct_length_10 | pct_length_20 | pct_length_50 | pct_length_100 | +---------------+---------------+---------------+----------------+ | 21.78 | 80.20 | 100.00 | 100.00 | +---------------+---------------+---------------+----------------+
表示80%的字串少於20個字符,所以前綴長度為50足夠了。
3.調整 INT 資料型態:
後接數字參數的 INT 資料型態(例如 INT(1))不會影響儲存或值範圍。 INT 資料型別始終佔用 4 個位元組,允許的值範圍為 -2147483648 到 2147483647。數字參數僅影響顯示期間的填充。
以上是如何解決 MySQL 錯誤 1071:「指定的金鑰太長;最大金鑰長度為 1000 位元組」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!