sql >> Database >  >> RDS >> Mysql

MySQL-fout:sleutelspecificatie zonder sleutellengte

De fout treedt op omdat MySQL alleen de eerste N-tekens van een BLOB of TEXT kan indexeren kolom. Dus de fout treedt voornamelijk op als er een veld/kolomtype is van TEXT of BLOB of die behoren tot TEXT of BLOB typen zoals TINYBLOB , MEDIUMBLOB , LONGBLOB , TINYTEXT , MEDIUMTEXT , en LONGTEXT dat u een primaire sleutel of index probeert te maken. Met volledige BLOB of TEXT zonder de lengtewaarde kan MySQL de uniciteit van de kolom niet garanderen, omdat deze een variabele en dynamische grootte heeft. Dus, bij gebruik van BLOB of TEXT typen als index, moet de waarde van N worden opgegeven zodat MySQL de sleutellengte kan bepalen. MySQL ondersteunt echter geen limiet voor de sleutellengte op TEXT of BLOB . TEXT(88) werkt gewoon niet.

De fout verschijnt ook wanneer u een tabelkolom probeert te converteren van non-TEXT en non-BLOB type zoals VARCHAR en ENUM in TEXT of BLOB type, waarbij de kolom al is gedefinieerd als unieke beperkingen of index. De Alter Table SQL-opdracht zal mislukken.

De oplossing voor het probleem is het verwijderen van de TEXT of BLOB kolom uit de index of unieke beperking of stel een ander veld in als primaire sleutel. Als u dat niet kunt en u wilt een limiet stellen aan de TEXT of BLOB kolom, probeer VARCHAR . te gebruiken typ en plaats er een lengtelimiet op. Standaard VARCHAR is beperkt tot maximaal 255 tekens en de limiet moet impliciet worden opgegeven tussen haakjes direct na de verklaring, d.w.z. VARCHAR(200) zal het beperken tot slechts 200 tekens.

Soms, ook al gebruik je geen TEXT of BLOB verwant type in uw tabel, kan de Error 1170 ook verschijnen. Het gebeurt in een situatie zoals wanneer u VARCHAR . specificeert kolom als primaire sleutel, maar stel de lengte of tekengrootte verkeerd in. VARCHAR kan maximaal 256 tekens accepteren, dus alles zoals VARCHAR(512) dwingt MySQL om de VARCHAR(512) . automatisch te converteren naar een SMALLTEXT datatype, dat vervolgens mislukt met fout 1170 op sleutellengte als de kolom wordt gebruikt als primaire sleutel of unieke of niet-unieke index. Om dit probleem op te lossen, specificeert u een getal kleiner dan 256 als de grootte voor VARCHAR veld.

Referentie:MySQL-fout 1170 (42000):BLOB/TEXT-kolom gebruikt in sleutelspecificatie zonder sleutellengte



  1. Wat hebben de Olympische Spelen, UEFA Euro 2016 voetbalwedstrijden en databases met elkaar gemeen?

  2. Bereken werkuren tussen 2 datums in PostgreSQL

  3. Introductie van algemene tabelexpressies in SQL Server

  4. TZ_OFFSET() Functie in Oracle