sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql:datatype for md5-meddelelsessammendrag?

md5-hashen som bytea vil kun bruge 16 bytes i stedet for 32 til hexa-repræsentationen:

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

Begge former ovenfor fungerer, men for at bruge den enklere digest funktion er det nødvendigt at installere pgcrypto udvidelse som superbruger:

create extension pgcrypto;

Brug digest funktion eller kombinationen af ​​decode og md5 som ovenfor for at søge efter en bestemt streng:

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ærdi er lagerstørrelsen. Det er mindre end halvdelen for bytea sammenlignet med hexa-repræsentationen.



  1. Fejl ved Update Join

  2. MySql får optegnelser eller data dagligt, ugentligt, månedligt og årligt

  3. MySQL - Rækker til kolonner

  4. .NET / Oracle:Sådan udføres et script med DDL-sætninger programmatisk