COMPRESS() în MySQL

Criptare și hash MySQL 5.0+

Comprimă un text (cu zlib) și returnează rezultatul ca șir binar.

Sintaxă
COMPRESS(text)

Ce face COMPRESS()

COMPRESS() micșorează texte lungi și repetitive, de exemplu jurnale sau documente JSON mari. Rezultatul începe cu 4 octeți care rețin lungimea originală, urmați de datele comprimate, și se decomprimă cu UNCOMPRESS().

Pentru texte scurte, rezultatul poate fi mai lung decât originalul. Un text gol rămâne gol. Salvează rezultatul într-o coloană binară (VARBINARY sau BLOB).

Parametri

Parametru Descriere
text Textul de comprimat.

Ce returnează

Un șir binar sau NULL.

Exemple

Exemplul 1: Cât se câștigă la diferite texte

SELECT LENGTH(COMPRESS(REPEAT('a', 1000))) AS repetitiv_1000,
       LENGTH(COMPRESS('a')) AS un_caracter,
       LENGTH(COMPRESS('')) AS gol;

Rezultat

+----------------+-------------+------+
| repetitiv_1000 | un_caracter | gol  |
+----------------+-------------+------+
|             21 |          13 |    0 |
+----------------+-------------+------+

Exemplul 2: Coloană comprimată

CREATE TABLE jurnal (id INT, mesaj_comprimat BLOB);
INSERT INTO jurnal VALUES (1, COMPRESS(REPEAT('Comanda 1042 a fost procesată. ', 50)));

SELECT id,
       LENGTH(mesaj_comprimat) AS octeti_in_tabel,
       UNCOMPRESSED_LENGTH(mesaj_comprimat) AS octeti_original,
       LEFT(UNCOMPRESS(mesaj_comprimat), 30) AS inceput
FROM jurnal;

Rezultat

+------+-----------------+-----------------+--------------------------------+
| id   | octeti_in_tabel | octeti_original | inceput                        |
+------+-----------------+-----------------+--------------------------------+
|    1 |              59 |            1600 | Comanda 1042 a fost procesată  |
+------+-----------------+-----------------+--------------------------------+

Greșeli frecvente

  • Comprimi texte scurte, ca nume sau e-mailuri. Rezultatul devine mai lung; comprimarea are sens doar pentru texte mari.
  • Cauți cu WHERE sau LIKE în coloana comprimată. Datele trebuie decomprimate întâi, ceea ce e lent; păstrează necomprimate coloanele după care cauți.

Comenzi înrudite

  • UNCOMPRESS(): Decomprimă un text comprimat cu COMPRESS(); returnează NULL dacă datele nu sunt comprimate.
  • UNCOMPRESSED_LENGTH(): Returnează lungimea pe care o avea textul înainte de COMPRESS(), fără să-l decomprime.
  • LENGTH(): Returnează lungimea unui text în octeți (bytes), nu în caractere.