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

Lỗi MySQL:đặc tả khóa 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 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 , MEDIUMTEXTLONGTEXT 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-TEXTnon-BLOB nhập chẳng hạn như VARCHARENUM 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.

Tham khảo: 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại hàng 'cuối cùng' của mỗi 'nhóm theo' trong MySQL

  2. Cách kiểm tra kết nối cơ sở dữ liệu PHP MySQL bằng Script

  3. JSON_OBJECTAGG () - Tạo một đối tượng JSON từ kết quả truy vấn trong MySQL

  4. Thay đổi giới hạn cho kích thước Hàng Mysql quá lớn

  5. Cách thiết lập cấu trúc chỉ mục ElasticSearch với nhiều liên kết thực thể