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

Lỗi MySQL # 1071 - Khóa được chỉ định quá dài; độ dài khóa tối đa là 767 byte

767 byte trong MySQL phiên bản 5.6 (và các phiên bản trước), là giới hạn tiền tố đã nêu cho các bảng InnoDB. Nó dài 1.000 byte cho các bảng MyISAM. Giới hạn này đã được tăng lên 3072 byte Trong MySQL phiên bản 5.7 (trở lên).

Bạn cũng phải lưu ý rằng nếu bạn đặt chỉ mục trên một char lớn hoặc varchar trường là utf8mb4 được mã hóa, bạn phải chia độ dài tiền tố chỉ mục tối đa là 767 byte (hoặc 3072 byte) cho 4, dẫn đến 191 . Điều này là do độ dài tối đa của utf8mb4 ký tự là bốn byte. Đối với một utf8 ký tự sẽ là ba byte dẫn đến độ dài tiền tố chỉ mục tối đa là 255 (hoặc trừ null-terminator, 254 ký tự).

Một tùy chọn bạn có là chỉ đặt giới hạn thấp hơn cho VARCHAR của bạn các lĩnh vực.

Một tùy chọn khác (theo phản hồi cho vấn đề này ) là lấy tập hợp con của cột thay vì toàn bộ số tiền, tức là:

ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );

Chỉnh sửa khi bạn cần để có khóa áp dụng, nhưng tôi tự hỏi liệu có đáng để xem lại mô hình dữ liệu của bạn liên quan đến thực thể này để xem liệu có thể cải thiện hay không, điều này sẽ cho phép bạn triển khai các quy tắc kinh doanh dự định mà không gặp phải giới hạn của MySQL .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nối nhiều bảng SQL bằng cách sử dụng ID?

  2. CHÈN ... TRÊN CẬP NHẬT KHÓA DUPLICATE với WHERE?

  3. MySQL length () so với char_length ()

  4. Không thể xóa hoặc cập nhật hàng mẹ:ràng buộc khóa ngoại không thành công

  5. Làm cách nào để lưu trữ GUID trong các bảng MySQL?