sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql:datatyp för md5-meddelandesammandrag?

md5-hash som bytea kommer att använda endast 16 byte i stället för 32 för hexa-representationen:

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

Båda formerna ovan kommer att fungera men för att använda den enklare digest funktionen är det nödvändigt att installera pgcrypto tillägg som superanvändare:

create extension pgcrypto;

Använd digest funktion eller kombinationen av decode och md5 som ovan för att söka efter en viss sträng:

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 värde är lagringsstorleken. Det är mindre än hälften för bytea jämfört med hexa-representationen.



  1. Hur man skapar ett index i Django utan driftstopp

  2. Hur man lägger till en uppslagskontroll till ett formulär i Access 2016

  3. Hur man hanterar privilegier med roller i MySQL

  4. mysqldump bästa praxis:Del 1 – MySQL-förutsättningar