ERROR 1170 (42000):Sloupec BLOB/TEXT ‘název_pole’ použitý ve specifikaci klíče bez délky klíče
K chybě dochází, protože MySQL může indexovat pouze prvních N znaků ve sloupci BLOB nebo TEXT. K chybě tedy dochází hlavně tehdy, když existuje typ pole/sloupce TEXT nebo BLOB nebo ty, které patří k typům TEXT nebo BLOB, jako jsou TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT a LONGTEXT, které se pokoušíte vytvořit jako primární klíč nebo index. S plným BLOB nebo TEXT bez hodnoty délky nemůže MySQL zaručit jedinečnost sloupce, protože má proměnnou a dynamickou velikost. Takže při použití typů BLOB nebo TEXT jako indexu je třeba zadat hodnotu N, aby MySQL mohla určit délku klíče. MySQL však nepodporuje omezení na TEXT nebo BLOB. TEXT(88) prostě nebude fungovat.
Chyba se také objeví, když se pokusíte převést sloupec tabulky z jiného typu než TEXT a typu BLOB, jako je VARCHAR a ENUM, na typ TEXT nebo BLOB, přičemž sloupec již byl definován jako jedinečná omezení nebo index. Příkaz Alter Table SQL se nezdaří.
Řešením problému je odebrání sloupce TEXT nebo BLOB z indexu nebo omezení jedinečnosti nebo nastavení jiného pole jako primárního klíče. Pokud to nemůžete udělat a chcete nastavit limit na sloupec TEXT nebo BLOB, zkuste použít typ VARCHAR a umístit na něj limit délky. Ve výchozím nastavení je VARCHAR omezen na maximálně 255 znaků a jeho limit musí být specifikován implicitně v závorce hned po jeho deklaraci, tj. VARCHAR(200) jej omezí pouze na 200 znaků.
Někdy, i když v tabulce nepoužíváte typ související s TEXT nebo BLOB, může se také objevit chyba 1170. Stává se to v situaci, kdy jako primární klíč zadáte sloupec VARCHAR, ale špatně nastavíte jeho délku nebo velikost znaků. VARCHAR může přijímat pouze až 256 znaků, takže cokoli jako VARCHAR(512) přinutí MySQL automaticky převést VARCHAR(512) na datový typ SMALLTEXT, což následně selže s chybou 1170 délky klíče, pokud je sloupec použit jako primární. klíč nebo jedinečný či nejedinečný index. Chcete-li tento problém vyřešit, zadejte jako velikost pole VARCHAR číslo menší než 256.