Tôi đọc rằng MySQL 5.6 chỉ có thể lập chỉ mục the first 767 bytes của một varchar
(hoặc các loại văn bản khác). Bộ ký tự giản đồ của tôi là utf-8
, vì vậy mỗi ký tự có thể được lưu trữ tối đa 3 byte. Kể từ 767/3 = 255,66, điều này sẽ chỉ ra rằng độ dài tối đa cho một cột văn bản cần được lập chỉ mục trong 255 ký tự. Kinh nghiệm dường như xác nhận điều này như sau đi qua:chiều dài tối đa của vachar cho chỉ mục với InnoDB và UTF-8
create table gaga (
val varchar(255),
index(val)
) engine = InnoDB;
Nhưng thay đổi định nghĩa của val
-varchar(256)
mang lại một "Error Code: 1071. rõ chìa khóa quá dài; chiều dài khóa tối đa là 767 byte".
Trong ngày này ở độ tuổi, giới hạn 255 ký tự có vẻ quá tệ, vì vậy: điều này có đúng không? Nếu đó là cách tốt nhất để có được những đoạn văn bản lớn hơn được lập chỉ mục với MySQL là gì? (Tôi có nên tránh nó không? Lưu trữ một SHA? Sử dụng một loại chỉ mục cơ sở dữ liệu khác?)