1170: ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length
MySQLNe demek?
Bir BLOB veya TEXT sütununu index/anahtar tanımında, önek uzunluğu (prefix length) belirtmeden kullandınız. Bu tiplerin tamamı indekslenemez; yalnızca ilk N karakteri/baytı indekslenebilir.
Neden olur?
CREATE TABLE veya CREATE INDEX içinde bir TEXT/BLOB sütununa uzunluk vermeden INDEX/UNIQUE/PRIMARY KEY tanımlamak. MySQL, potansiyel olarak çok büyük bu değerlerin tamamını indeksleyemeyeceği için önek uzunluğu ister.
Nasıl çözülür?
Index'te önek uzunluğu belirtin: INDEX (aciklama(255)) gibi. Örnek: ALTER TABLE tablo ADD INDEX idx_aciklama (aciklama(191)); (utf8mb4'te InnoDB anahtar önek sınırı nedeniyle 191 sık kullanılır). Tam metin araması gerekiyorsa FULLTEXT index düşünün. Kısa ve tekil olması gereken alanlarda sütunu VARCHAR'a çevirmek daha uygun olabilir.
Aynı motorda diğer kayıtlar
- 1836ER_READ_ONLY_MODE: Running in read-only mode
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated
- 1118ER_TOO_BIG_ROWSIZE: Row size too large
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value
- 1049Unknown database 'name'