Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi MySQL 1170 (42000):Cột BLOB / TEXT được sử dụng trong đặc điểm kỹ thuật chính mà không có độ dài khóa

Khi tạo một bảng mới hoặc thay đổi một bảng hiện có với các khóa chính, các ràng buộc và chỉ mục duy nhất hoặc khi xác định một chỉ mục mới bằng câu lệnh thao tác với Alter Table trong cơ sở dữ liệu MySQL, lỗi sau có thể xảy ra và cấm lệnh hoàn thành:

LỖI 1170 (42000):Cột BLOB / TEXT ‘field_name’ được sử dụng trong đặc tả khóa mà không có độ dài khóa

Lỗi xảy ra vì MySQL chỉ có thể lập chỉ mục N ký tự đầu tiên của cột BLOB hoặc TEXT. Vì vậy, lỗi chủ yếu xảy ra khi có một loại trường / cột là TEXT hoặc BLOB hoặc những trường thuộc loại TEXT hoặc BLOB như TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT và LONGTEXT mà bạn cố gắng đặt làm khóa chính hoặc chỉ mục. Với BLOB hoặc TEXT đầy đủ mà 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 kiểu BLOB hoặc TEXT làm 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 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ừ loại không phải TEXT và không phải BLOB chẳng hạn như VARCHAR và ENUM thành loại TEXT hoặc BLOB, 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 cột TEXT hoặc BLOB khỏi chỉ mục hoặc ràng buộc duy nhất, hoặc đặt mộ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 cột TEXT hoặc BLOB, hãy thử sử dụng loại VARCHAR 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ẽ chỉ giới hạn ở 200 ký tự.

Đôi khi, ngay cả khi bạn không sử dụng loại liên quan TEXT hoặc BLOB trong bảng của mình, Lỗi 1170 cũng có thể xuất hiện. Nó xảy ra trong tình huống chẳng hạn như khi bạn chỉ định cột 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 kiểu dữ liệu SMALLTEXT, 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 chính khóa 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 trường VARCHAR.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ROW_NUMBER trong SQL - Chọn ví dụ hàng đầu trong SQL và SQL Server

  2. So sánh MySQL với giá trị null

  3. Các thủ tục được lưu trữ trong MySQL sử dụng chúng hoặc không sử dụng chúng

  4. Liên kết dự án không hoạt động trên Máy chủ Wamp

  5. Sự khác biệt thực tế giữa `REPLACE` và` INSERT ... ON DUPLICATE KEY UPDATE` trong MySQL là gì?