sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fel #1071 - Angiven nyckel var för lång; max nyckellängd är 767 byte

767 byte i MySQL version 5.6 (och tidigare versioner), är den angivna prefixbegränsningen a> för InnoDB-tabeller. Den är 1 000 byte lång för MyISAM-tabeller. Denna gräns har höjts till 3072 byte i MySQL version 5.7 (och uppåt).

Du måste också vara medveten om att om du ställer in ett index på en stor char eller varchar fält som är utf8mb4 kodad måste du dividera den maximala indexprefixlängden på 767 byte (eller 3072 byte) med 4 vilket resulterar i 191 . Detta beror på att den maximala längden på en utf8mb4 tecknet är fyra byte. För en utf8 tecken skulle det vara tre byte vilket resulterar i maximal indexprefixlängd på 255 (eller minus null-terminator, 254 tecken).

Ett alternativ du har är att bara sätta en nedre gräns på din VARCHAR fält.

Ett annat alternativ (enligt svaret på det här problemet ) är att få delmängden av kolumnen snarare än hela beloppet, dvs.:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Justera som du behöver för att få nyckeln att tillämpa, men jag undrar om det skulle vara värt det att granska din datamodell angående denna enhet för att se om det finns förbättringar möjliga, vilket skulle tillåta dig att implementera de avsedda affärsreglerna utan att träffa MySQL-begränsningen .



  1. Hur man hittar kolumnnamn för alla tabeller i alla databaser i SQL Server

  2. node-mysql flera satser i en fråga

  3. Hur man släpper en begränsning i SQL Server (T-SQL)

  4. Rethink Flask – En enkel att göra-lista som drivs av Flask och RethinkDB