PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql:typ danych dla skrótu wiadomości md5?

Skrót md5 jako bytea użyje tylko 16 bajtów zamiast 32 dla reprezentacji szesnastkowej:

create table t (d bytea);
insert into t (d) values
    (digest('my_string', 'md5')),
    (decode(md5('my_string'), 'hex'));

Oba powyższe formularze będą działać, ale użyj prostszego digest funkcji konieczne jest zainstalowanie pgcrypto rozszerzenie jako superużytkownik:

create extension pgcrypto;

Użyj digest funkcja lub kombinacja decode i md5 jak powyżej, aby wyszukać określony ciąg:

select
    octet_length(d) ba_length,
    pg_column_size(d) ba_column,
    encode(d, 'hex') hex_representation,
    octet_length(encode(d, 'hex')) h_length,
    pg_column_size(encode(d, 'hex')) h_column
from t
where d = digest('my_string', 'md5')
;
 ba_length | ba_column |        hex_representation        | h_length | h_column 
-----------+-----------+----------------------------------+----------+----------
        16 |        17 | 3d212b21fad7bed63c1fb560c6a5c5d0 |       32 |       36
        16 |        17 | 3d212b21fad7bed63c1fb560c6a5c5d0 |       32 |       36

pg_column_size wartość to rozmiar pamięci. To mniej niż połowa dla bytea w porównaniu do reprezentacji szesnastkowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyjątek w JPA podczas używania pliku seed dla PostgreSQL

  2. Najlepsze praktyki bezpieczeństwa PostgreSQL

  3. Spring + Hibernate:Wykorzystanie pamięci podręcznej planu zapytań

  4. Postgres:sprawdź, czy pole tablicy zawiera wartość?

  5. Jak uzyskać wartość z ostatniego wstawionego wiersza?