767 bajtů v MySQL verze 5.6 (a předchozí verze), je uvedené omezení předpon pro tabulky InnoDB. U tabulek MyISAM je to 1 000 bajtů. Tento limit byl zvýšen na 3072 bajtů v MySQL verze 5.7 (a výše).
Musíte si také uvědomit, že pokud nastavíte index na velký znak nebo varchar
pole, které je utf8mb4
zakódované, musíte vydělit maximální délku prefixu indexu 767 bajtů (nebo 3072 bajtů) 4, což vede k 191 . Důvodem je maximální délka utf8mb4
znak je čtyři bajty. Pro utf8
znak by to byly tři bajty, což by znamenalo maximální délku předpony indexu 255 (nebo minus null-terminátor, 254 znaků).
Jednou z možností, kterou máte, je pouze nastavit spodní limit na váš VARCHAR
pole.
Další možnost (podle odpovědi na tento problém ) je získat spíše podmnožinu sloupce než celou částku, tj.:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
Vylaďte, jak potřebujete, abyste získali klíč k použití, ale zajímalo by mě, zda by stálo za to zkontrolovat váš datový model týkající se této entity, abyste zjistili, zda jsou možná vylepšení, která by vám umožnila implementovat zamýšlená obchodní pravidla, aniž byste narazili na omezení MySQL .