sql >> Database teknologi >  >> RDS >> Mysql

MySQL-fejl #1071 - Den angivne nøgle var for lang; max nøglelængde er 767 bytes

767 bytes i MySQL version 5.6 (og tidligere versioner), er den angivne præfiksbegrænsning a> til InnoDB-tabeller. Den er 1.000 bytes lang for MyISAM-tabeller. Denne grænse er blevet øget til 3072 bytes i MySQL version 5.7 (og opad).

Du skal også være opmærksom på, at hvis du indstiller et indeks på en stor char eller varchar felt, som er utf8mb4 kodet, skal du dividere den maksimale indekspræfikslængde på 767 bytes (eller 3072 bytes) med 4, hvilket resulterer i 191 . Dette skyldes, at den maksimale længde af en utf8mb4 karakter er fire bytes. For en utf8 tegn ville det være tre bytes, hvilket resulterer i maks. indekspræfikslængde på 255 (eller minus null-terminator, 254 tegn).

En mulighed, du har, er at placere den nedre grænse for din VARCHAR felter.

En anden mulighed (ifølge svaret på dette problem ) er at få delmængden af ​​kolonnen i stedet for hele beløbet, dvs.:

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

Tweak som du har brug for for at få nøglen til at anvende, men jeg spekulerer på, om det ville være det værd at gennemgå din datamodel vedrørende denne enhed for at se, om der er forbedringer mulige, som ville give dig mulighed for at implementere de tilsigtede forretningsregler uden at ramme MySQL-begrænsningen .



  1. Opret et SQL Server Agent Job ved hjælp af T-SQL

  2. MySQL backup og gendannelseskommandoer til databaseadministration

  3. Hvordan laver man en opdatering + deltager i PostgreSQL?

  4. Hvad er den maksimale længde af et tabelnavn i Oracle?