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

Lưu trữ giá trị băm SHA1 trong MySQL

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cài đặt MySQL trên CentOS 6

  2. SQL - Cập nhật nhiều bản ghi trong một truy vấn

  3. 4 cách để kiểm tra kiểu dữ liệu của cột trong MySQL

  4. Xóa khỏi hai bảng trong một truy vấn

  5. Tôi có thể kết hợp các API MySQL trong PHP không?