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 .