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
WHEREsauLIKEî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.