MySQL 錯誤#1071:了解金鑰長度限制
嘗試為資料庫表建立唯一金鑰時,遇到下列錯誤:
#1071 - Specified key was too long; max key length is 767 bytes
錯誤訊息顯示指定的key超過了允許的最大長度InnoDB 表,767 位元組。這種行為在早期版本的 MySQL 中很常見,例如 5.6 及更早版本。
VARCHAR 欄位的位元組計算
您有 VARCHAR(20) 類型的欄位 column1欄位 2 的型別為 VARCHAR(500)。最初,您可能假設密鑰需要 21 501 = 522 位元組,小於 767。但是,這種假設是不正確的。
了解前綴長度限制
MySQL 文件指出鍵的最大前綴長度為 767 位元組。此長度限制適用於鍵中包含的列的組合長度。在這種情況下,總密鑰長度為 21 500 = 521 位元組,小於 767。
但是,需要注意的是,前綴長度限制實際上取決於列使用的字元編碼。對於 VARCHAR(20) 等非 Unicode 資料列,每個字元需要一個位元組。但是,對於 Unicode 列,例如 VARCHAR(500) utf8_general_ci,每個字元可能需要多個位元組。
Unicode 欄位的位元組計算
在這種情況下,column2 是Unicode 欄位。 utf8_general_ci 字元集每個字元最多使用 3 個位元組。因此,Unicode 列的實際鍵長度是透過將字元長度乘以每個字元的位元組數來計算的:
20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes
解決方案:縮短鍵前綴
由於密鑰長度超過最大限制,可以透過縮短密鑰前綴來解決錯誤。這可以透過限制為第 2 列索引的字元數來實現。例如:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
此調整將密鑰總長度減少到 21 (200 * 3) = 621 位元組,現在符合 767 位元組前綴長度限制。
以上是MySQL 錯誤 #1071:如何解決「指定鍵太長;最大鍵長度為 767 位元組」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!