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ơ.