sql >> Database teknologi >  >> RDS >> MariaDB

Sådan fungerer COMPRESS() i MariaDB

I MariaDB, COMPRESS() er en indbygget funktion, der komprimerer en streng og returnerer resultatet som en binær streng.

COMPRESS() funktion kræver, at MariaDB er blevet kompileret med et komprimeringsbibliotek såsom zlib. Hvis MariaDB ikke er blevet kompileret med et sådant komprimeringsbibliotek, COMPRESS() returnerer null .

Syntaks

Syntaksen ser sådan ud:

COMPRESS(string_to_compress)

Hvor string_to_compress er den streng, du vil komprimere.

Eksempel

Her er et grundlæggende eksempel:

SELECT
    LENGTH(REPEAT('z', 50)) AS "Uncompressed",
    LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";

Resultat:

+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
|           50 |         16 |
+--------------+------------+

Her brugte jeg LENGTH() funktion til at få længden i bytes af henholdsvis de ukomprimerede og komprimerede strenge. Jeg brugte REPEAT() funktion til at gentage det samme bogstav 50 gange, før det komprimeres.

Her er et andet eksempel, der bruger copyright-symbolet (© ):

SELECT
    LENGTH(REPEAT('©', 50)) AS "Uncompressed",
    LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";

Resultat:

+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
|          100 |         17 |
+--------------+------------+

Ophavsretssymbolet er et to-byte-tegn, og dets ukomprimerede længde er dobbelt så stort som et enkelt-byte-tegn. Men komprimering af denne streng af gentagne to-byte-tegn bringer den ned til en størrelse, der svarer til den komprimerede streng af gentagne enkelt-byte-tegn.

Her er en, der bruger et tre-byte tegn:

SELECT
    LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
    LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";

Resultat:

+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
|          150 |         18 |
+--------------+------------+

I dette tilfælde er effekten endnu større. Den gentagne tre-byte-tegnstreng er reduceret til en størrelse, der svarer til de gentagne en- og to-byte-tegnstrenge i de foregående eksempler.

Nul-argumenter

Sender null returnerer null :

SELECT COMPRESS(null);

Resultat:

+----------------+
| COMPRESS(null) |
+----------------+
| NULL           |
+----------------+

Manglende argument

Kalder COMPRESS() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT COMPRESS();

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'

Tjek efter komprimering

Som nævnt er COMPRESS() funktion kræver, at MariaDB er blevet kompileret med et komprimeringsbibliotek såsom zlib. Hvis MariaDB ikke er blevet kompileret med et sådant komprimeringsbibliotek, COMPRESS() returnerer null .

Du kan tjekke have_compress systemvariabel for at se, om zlib-komprimeringsbiblioteket er tilgængeligt for serveren:

SELECT @@have_compress;

Resultat:

+-----------------+
| @@have_compress |
+-----------------+
| YES             |
+-----------------+

I dette tilfælde er zlib-komprimeringsbiblioteket tilgængeligt for serveren, og resultatet er YES .

Hvis zlib-komprimeringsbiblioteket ikke er tilgængeligt for serveren, ville resultatet være NO .


  1. Sådan ændres samlingen af ​​en SQL Server-database ved hjælp af T-SQL

  2. Opret en visning i SQL Server 2017

  3. NULL i MySQL (Performance &Storage)

  4. jsonb vs jsonb[] for flere adresser til en kunde