767 byte di MySQL versi 5.6 (dan versi sebelumnya), adalah batasan awalan yang dinyatakan untuk tabel InnoDB. Panjangnya 1.000 byte untuk tabel MyISAM. Batas ini telah ditingkatkan menjadi 3072 byte Di MySQL versi 5.7 (dan ke atas).
Anda juga harus menyadari bahwa jika Anda menetapkan indeks pada char besar atau varchar
bidang yang utf8mb4
dikodekan, Anda harus membagi panjang awalan indeks maksimum 767 byte (atau 3072 byte) dengan 4 yang menghasilkan 191 . Ini karena panjang maksimum utf8mb4
karakter adalah empat byte. Untuk utf8
karakter itu akan menjadi tiga byte yang menghasilkan panjang awalan indeks maksimum 255 (atau dikurangi null-terminator, 254 karakter).
Salah satu opsi yang Anda miliki adalah hanya menempatkan batas bawah pada VARCHAR
bidang.
Opsi lain (menurut respons terhadap masalah ini ) adalah untuk mendapatkan subset kolom daripada seluruh jumlah, yaitu:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Tweak karena Anda perlu mendapatkan kunci untuk diterapkan, tetapi saya ingin tahu apakah layak untuk meninjau model data Anda mengenai entitas ini untuk melihat apakah ada peningkatan yang mungkin, yang akan memungkinkan Anda untuk menerapkan aturan bisnis yang dimaksud tanpa mencapai batasan MySQL .