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

Mysql::Fejl:Den angivne nøgle var for lang; max nøglelængde er 1000 bytes

Dette er udelukkende et MySQL-problem -

MySQL har forskellige motorer - MyISAM, InnoDB, Memory...

MySQL har forskellige grænser for mængden af ​​plads, du kan bruge til at definer indekser på kolonne(r) - for MyISAM er det 1.000 bytes; det er 767 for InnoDB . Og datatypen for disse kolonner har betydning - for VARCHAR , det er 3x, så et indeks på en VARCHAR(100) vil tage 300 af disse bytes (fordi 100 tegn * 3 =300).

For at imødekomme en vis indeksering, når du rammer loftværdien, kan du definere indekset med hensyn til dele af kolonnedatatypen:

CREATE INDEX example_idx ON YOUR_TABLE(your_column(50))

Forudsat at your_column er VARCHAR(100) , vil indekset i eksemplet ovenfor kun være på de første 50 tegn. Søgning efter data ud over det 50. tegn vil ikke kunne bruge indekset.



  1. Hvorfor ville en IN-tilstand være langsommere end =i sql?

  2. Postgres kopierer Heroku Production DB til lokal udvikling DB

  3. SQL CASE-sætning:Hvad er det, og hvad er de bedste måder at bruge det på?

  4. Sådan fungerer RIGHT()-funktionen i MySQL