sql >> Databáze >  >> RDS >> Mysql

Chyba MySQL #1071 - Zadaný klíč byl příliš dlouhý; maximální délka klíče je 767 bajtů

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 .



  1. INSERT INTO nebo UPDATE se dvěma podmínkami

  2. Vytvořte tabulku pomocí datového razítka

  3. Jak mohu přidat sloupec, který nepovoluje hodnoty null v databázi Postgresql?

  4. Jak získat data za posledních 7 dní od aktuálního data do posledních 7 dní na serveru SQL