Lỗi xảy ra vì MySQL chỉ có thể lập chỉ mục N ký tự đầu tiên của BLOB hoặc TEXT
cột. Vì vậy, lỗi chủ yếu xảy ra khi có một loại trường / cột của TEXT
hoặc BLOB hoặc những thứ đó thuộc về TEXT
hoặc BLOB
các loại như TINYBLOB
, MEDIUMBLOB
, LONGBLOB
, TINYTEXT
, MEDIUMTEXT
và LONGTEXT
mà bạn cố gắng tạo khóa chính hoặc chỉ mục. Với BLOB
đầy đủ hoặc TEXT
không có giá trị độ dài, MySQL không thể đảm bảo tính duy nhất của cột vì nó có kích thước thay đổi và động. Vì vậy, khi sử dụng BLOB
hoặc TEXT
kiểu như một chỉ mục, giá trị của N phải được cung cấp để MySQL có thể xác định độ dài khóa. Tuy nhiên, MySQL không hỗ trợ giới hạn độ dài khóa trên TEXT
hoặc BLOB
. TEXT(88)
đơn giản là sẽ không hoạt động.
Lỗi cũng sẽ xuất hiện khi bạn cố gắng chuyển đổi một cột trong bảng từ non-TEXT
và non-BLOB
nhập chẳng hạn như VARCHAR
và ENUM
thành TEXT
hoặc BLOB
loại, với cột đã được xác định là các ràng buộc hoặc chỉ mục duy nhất. Lệnh Alter Table SQL sẽ không thành công.
Giải pháp cho vấn đề là xóa TEXT
hoặc BLOB
từ chỉ mục hoặc ràng buộc duy nhất hoặc đặt trường khác làm khóa chính. Nếu bạn không thể làm điều đó và muốn đặt giới hạn cho TEXT
hoặc BLOB
, hãy thử sử dụng VARCHAR
nhập và đặt giới hạn độ dài trên đó. Theo mặc định, VARCHAR
được giới hạn ở tối đa 255 ký tự và giới hạn của nó phải được chỉ định ngầm trong dấu ngoặc vuông ngay sau khi khai báo, tức là VARCHAR(200)
sẽ giới hạn nó chỉ dài 200 ký tự.
Đôi khi, ngay cả khi bạn không sử dụng TEXT
hoặc BLOB
loại liên quan trong bảng của bạn, Lỗi 1170 cũng có thể xuất hiện. Nó xảy ra trong một tình huống chẳng hạn như khi bạn chỉ định VARCHAR
làm khóa chính, nhưng đặt sai độ dài hoặc kích thước ký tự của nó. VARCHAR
chỉ có thể chấp nhận tối đa 256 ký tự, vì vậy bất kỳ thứ gì chẳng hạn như VARCHAR(512)
sẽ buộc MySQL tự động chuyển đổi VARCHAR(512)
thành một SMALLTEXT
kiểu dữ liệu, sau đó không thành công với lỗi 1170 về độ dài khóa nếu cột được sử dụng làm khóa chính hoặc chỉ mục duy nhất hoặc không duy nhất. Để giải quyết vấn đề này, hãy chỉ định một hình nhỏ hơn 256 làm kích thước cho VARCHAR
trường.