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
Lepaskan: 2024-12-13 19:41:19
asal
284 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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) );
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan