首頁 >資料庫 >mysql教程 >為什麼 MySQL 會拋出錯誤#1071:「指定的鍵太長」?

為什麼 MySQL 會拋出錯誤#1071:「指定的鍵太長」?

Patricia Arquette
Patricia Arquette原創
2024-12-14 14:59:10537瀏覽

Why Does MySQL Throw Error #1071:

MySQL 錯誤#1071:深入研究金鑰長度限制

嘗試透過在兩個VARCHAR 上新增唯一鍵約束來修改MySQL 表時列時,會出現一條相當令人困惑的錯誤訊息:「#1071 - 指定的密鑰太長;最大密鑰長度為767 位元組".儘管兩列的大小似乎都在 767 位元組限制之內,但了解此錯誤需要更深入地了解 MySQL 的金鑰長度限制。

重新存取金鑰長度限制

MySQL 5.6 及更早版本中鍵的最大長度對於InnoDB 表來說確實是767 位元組,對於InnoDB 表來說是1,000 位元組MyISAM 表。然而,在 MySQL 5.7 及更高版本中,此限制已擴展到更大的 3072 位元組。

解碼 VARCHAR 儲存

雖然 VARCHAR 資料類型建議最大長度為各自的欄位儲存 20 和 500 位元組,此計算不考慮字元編碼。如果您的 VARCHAR 欄位以 utf8mb4 格式編碼,則最大索引前綴長度實際上會減少四分之一,結果只有 191 個位元組 (767 / 4)。

找出解決方法

要解決此問題,請考慮實施以下其中一項策略:

  • 減少列大小:限制VARCHAR 欄位的最大長度以滿足索引前綴長度約束。
  • 對列進行子集化: 僅利用列的一部分進行索引,從而減少鍵長。例如: ALTER TABLE mytable ADD UNIQUE (column1(15),column2(200));
  • 審查資料模型:重新評估您的表設計並考慮是否有替代方法可以避免遇遇到這個MySQL 限制。

以上是為什麼 MySQL 會拋出錯誤#1071:「指定的鍵太長」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn