Rumah >pangkalan data >tutorial mysql >Ralat MySQL #1071: Bagaimana untuk Menyelesaikan 'Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 767 bait'?

Ralat MySQL #1071: Bagaimana untuk Menyelesaikan 'Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 767 bait'?

Linda Hamilton
Linda Hamiltonasal
2024-12-13 19:41:19193semak imbas

MySQL Error #1071: How to Resolve

Ralat MySQL #1071: Memahami Kekangan Panjang Kunci

Semasa cuba mencipta kunci unik untuk jadual pangkalan data, anda menghadapi ralat berikut :

#1071 - Specified key was too long; max key length is 767 bytes

Mesej ralat menunjukkan bahawa kunci yang ditentukan melebihi maksimum yang dibenarkan panjang untuk jadual InnoDB, iaitu 767 bait. Tingkah laku ini sering dilihat dalam versi MySQL yang lebih awal, seperti 5.6 dan sebelumnya.

Pengiraan Bait untuk Lajur VARCHAR

Anda mempunyai lajur lajur1 jenis VARCHAR(20) dan lajur2 jenis VARCHAR(500). Pada mulanya, anda mungkin menganggap bahawa kunci memerlukan 21 501 = 522 bait, iaitu kurang daripada 767. Walau bagaimanapun, andaian ini tidak betul.

Memahami Had Panjang Awalan

Dokumentasi MySQL menyatakan bahawa panjang awalan maksimum untuk kunci ialah 767 bait. Had panjang ini digunakan pada gabungan panjang lajur yang disertakan dalam kunci. Dalam kes ini, jumlah panjang kunci ialah 21 500 = 521 bait, iaitu kurang daripada 767.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa had panjang awalan sebenarnya bergantung pada pengekodan aksara yang digunakan oleh lajur. Untuk lajur bukan Unicode seperti VARCHAR(20), setiap aksara memerlukan satu bait. Walau bagaimanapun, untuk lajur Unicode, seperti VARCHAR(500) utf8_general_ci, setiap aksara boleh memerlukan berbilang bait.

Pengiraan Bait untuk Lajur Unikod

Dalam kes ini, lajur2 ialah lajur Unicode. Set aksara utf8_general_ci menggunakan sehingga 3 bait setiap aksara. Oleh itu, panjang kunci sebenar untuk lajur Unicode dikira dengan mendarabkan panjang aksara dengan bilangan bait setiap aksara:

20 bytes (column1) + (500 bytes * 3 bytes per character) = 1501 bytes

Penyelesaian: Memendekkan Awalan Kunci

Memandangkan panjang kunci melebihi had maksimum, anda boleh menyelesaikan ralat dengan memendekkan awalan kunci. Ini boleh dicapai dengan mengehadkan bilangan aksara yang diindeks untuk lajur2. Contohnya:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Pelarasan ini mengurangkan jumlah panjang kunci kepada 21 (200 * 3) = 621 bait, yang kini mematuhi had panjang awalan 767-bait.

Atas ialah kandungan terperinci Ralat MySQL #1071: Bagaimana untuk Menyelesaikan 'Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 767 bait'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn