sql >> Database >  >> RDS >> Mysql

Mysql::Error:Opgegeven sleutel was te lang; maximale sleutellengte is 1000 bytes

Dit is uitsluitend een MySQL-probleem -

MySQL heeft verschillende engines - MyISAM, InnoDB, Memory...

MySQL heeft verschillende limieten voor de hoeveelheid ruimte die u kunt gebruiken om definieer indexen op kolom(men) - voor MyISAM is dit 1.000 bytes; het is 767 voor InnoDB . En het gegevenstype van die kolommen is van belang - voor VARCHAR , het is 3x dus een index op een VARCHAR(100) zal 300 van die bytes in beslag nemen (omdat 100 tekens * 3 =300).

Om enige indexering mogelijk te maken wanneer u de plafondwaarde bereikt, kunt u de index definiëren met betrekking tot delen van het kolomgegevenstype:

CREATE INDEX example_idx ON YOUR_TABLE(your_column(50))

Ervan uitgaande dat your_column is VARCHAR(100) , zal de index in het bovenstaande voorbeeld alleen op de eerste 50 tekens staan. Zoeken naar gegevens na het 50e teken kan de index niet gebruiken.



  1. SQL Server-databases CPU-gebruiksstatistieken

  2. Negatieve waarden opmaken met haakjes in SQL Server (T-SQL)

  3. Is er een SQLite-equivalent van MySQL's DESCRIBE [tabel]?

  4. Voorbeeld van Oracle IF-voorwaarde