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