sql >> Database >  >> RDS >> Mysql

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

Bij het maken van een nieuwe tabel of het wijzigen van een bestaande tabel met primaire sleutels, unieke beperkingen en indexen, of bij het definiëren van een nieuwe index met Alter Table-manipulatie-instructie in de MySQL-database, kan de volgende fout optreden en kan de opdracht niet worden voltooid:

ERROR 1170 (42000):BLOB/TEXT-kolom 'veldnaam' gebruikt in sleutelspecificatie zonder sleutellengte

De fout treedt op omdat MySQL alleen de eerste N-tekens van een BLOB- of TEXT-kolom kan indexeren. Dus de fout treedt voornamelijk op wanneer er een veld / kolomtype TEKST of BLOB is of die behoort tot TEXT- of BLOB-typen zoals TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT en LONGTEXT die u probeert te maken als primaire sleutel of index. 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 op TEKST of BLOB. TEXT(88) werkt gewoon niet.

De fout verschijnt ook wanneer u een tabelkolom probeert te converteren van een niet-TEXT- en niet-BLOB-type zoals VARCHAR en ENUM naar 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 om de TEXT- of BLOB-kolom uit de index of unieke beperking te verwijderen, of een ander veld als primaire sleutel in te stellen. Als je dat niet kunt doen en een limiet wilt plaatsen op de TEKST- of BLOB-kolom, probeer dan het VARCHAR-type te gebruiken en plaats er een limiet voor de lengte op. Standaard is VARCHAR beperkt tot een maximum van 255 tekens en de limiet moet impliciet worden opgegeven binnen een haakje direct na de verklaring, d.w.z. VARCHAR(200) zal het beperken tot slechts 200 tekens.

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


  1. Selecteer xml-elementwaarde in Oracle

  2. Getallen opmaken met komma's in PostgreSQL

  3. SQLite-index

  4. Hoe bekijk ik de volledige inhoud van een tekst- of varchar(MAX)-kolom in SQL Server 2008 Management Studio?