Tôi sẽ sử dụng VARCHAR cho dữ liệu độ dài thay đổi, nhưng không cho dữ liệu độ dài cố định. Bởi vì giá trị SHA-1 là luôn luôn Dài 160 bit, VARCHAR sẽ chỉ lãng phí một byte bổ sung cho độ dài của tệp tin cố định- trường độ dài
.
Và tôi cũng sẽ không lưu trữ giá trị SHA1
đang trở lại. Bởi vì nó chỉ sử dụng 4 bit cho mỗi ký tự và do đó sẽ cần 160/4 =40 ký tự. Nhưng nếu bạn sử dụng 8 bit cho mỗi ký tự, bạn sẽ chỉ cần một trường dài 160/8 =20 ký tự.
Vì vậy, tôi khuyên bạn nên sử dụng BINARY(20)
và UNHEX chức năng
để chuyển đổi SHA1 giá trị thành nhị phân.
Tôi đã so sánh các yêu cầu lưu trữ cho BINARY(20) và CHAR(40) .
CREATE TABLE `binary` (
`id` int unsigned auto_increment primary key,
`password` binary(20) not null
);
CREATE TABLE `char` (
`id` int unsigned auto_increment primary key,
`password` char(40) not null
);
Với hàng triệu bản ghi binary(20) mất 44,56M, trong khi char(40) mất 64,57M. InnoDB động cơ.