Rumah > pangkalan data > tutorial mysql > Mengapa MySQL Throw Ralat #1071: 'Kunci yang ditentukan terlalu panjang'?

Mengapa MySQL Throw Ralat #1071: 'Kunci yang ditentukan terlalu panjang'?

Patricia Arquette
Lepaskan: 2024-12-14 14:59:10
asal
536 orang telah melayarinya

Why Does MySQL Throw Error #1071:

MySQL Error #1071: Menyelidiki Kekangan Panjang Utama

Apabila cuba mengubah suai jadual MySQL dengan menambahkan kekangan kunci unik pada dua VARCHAR lajur, mesej ralat yang agak membingungkan timbul: "#1071 - Kunci yang ditentukan terlalu panjang; panjang kunci maksimum ialah 767 bait". Walaupun kedua-dua lajur mempunyai saiz yang kelihatan baik dalam had 767 bait, memahami ralat ini memerlukan penyelaman yang lebih mendalam ke dalam kekangan panjang kunci MySQL.

Mengulas Semula Had Panjang Utama

Panjang maksimum untuk kunci dalam MySQL versi 5.6 dan lebih awal sememangnya 767 bait untuk jadual InnoDB dan 1,000 bait untuk jadual MyISAM. Walau bagaimanapun, dalam MySQL versi 5.7 dan ke atas, had ini telah dikembangkan kepada 3072 bait yang lebih besar.

Menyahkod Storan VARCHAR

Walaupun jenis data VARCHAR mencadangkan maksimum penyimpanan 20 dan 500 bait untuk lajur anda masing-masing, pengiraan ini tidak mengambil kira pengekodan aksara. Jika medan VARCHAR anda dikodkan dalam format utf8mb4, panjang awalan indeks maksimum berkesan dikurangkan sebanyak satu perempat, menghasilkan hanya 191 bait (767 / 4).

Mencari Penyelesaian

Untuk menyelesaikan isu ini, pertimbangkan untuk melaksanakan salah satu daripada yang berikut strategi:

  • Kurangkan Saiz Lajur: Hadkan panjang maksimum medan VARCHAR anda untuk memenuhi kekangan panjang awalan indeks.
  • Subset Lajur: Gunakan hanya sebahagian daripada lajur untuk pengindeksan, dengan itu mengurangkan panjang kunci. Contohnya: ALTER TABLE mytable ADD UNIQUE ( column1(15), column2(200) );
  • Semak Model Data: Nilai semula reka bentuk jadual anda dan pertimbangkan jika terdapat pendekatan alternatif yang boleh mengelak daripada menghadapi had MySQL ini.

Atas ialah kandungan terperinci Mengapa MySQL Throw Ralat #1071: 'Kunci yang ditentukan terlalu panjang'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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