I MariaDB, COMPRESS()
är en inbyggd funktion som komprimerar en sträng och returnerar resultatet som en binär sträng.
COMPRESS()
funktionen kräver att MariaDB har kompilerats med ett komprimeringsbibliotek som zlib. Om MariaDB inte har kompilerats med ett sådant komprimeringsbibliotek, COMPRESS()
returnerar null
.
Syntax
Syntaxen ser ut så här:
COMPRESS(string_to_compress)
Där string_to_compress
är strängen du vill komprimera.
Exempel
Här är ett grundläggande exempel:
SELECT
LENGTH(REPEAT('z', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";
Resultat:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 50 | 16 | +--------------+------------+
Här använde jag LENGTH()
funktion för att få längden i byte av de okomprimerade respektive komprimerade strängarna. Jag använde REPEAT()
funktion för att upprepa samma bokstav 50 gånger innan du komprimerar den.
Här är ett annat exempel som använder copyright-symbolen (©
):
SELECT
LENGTH(REPEAT('©', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";
Resultat:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 100 | 17 | +--------------+------------+
Upphovsrättssymbolen är ett tvåbytestecken och dess okomprimerade längd är dubbelt så stor som ett enkelbytetecken. Om du komprimerar den här strängen med upprepade två-byte-tecken får den dock samma storlek som den komprimerade strängen med upprepade enkelbyte-tecken.
Här är en som använder ett tre-byte-tecken:
SELECT
LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";
Resultat:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 150 | 18 | +--------------+------------+
I det här fallet är effekten ännu större. Den upprepade tre-byte-teckensträngen reduceras till samma storlek som de upprepade en- och tvåbyte-teckensträngarna i de tidigare exemplen.
Nollargument
Skickar null
returnerar null
:
SELECT COMPRESS(null);
Resultat:
+----------------+ | COMPRESS(null) | +----------------+ | NULL | +----------------+
Argument saknas
Anropar COMPRESS()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:
SELECT COMPRESS();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'
Kontrollera efter komprimering
Som nämnts, COMPRESS()
funktionen kräver att MariaDB har kompilerats med ett komprimeringsbibliotek som zlib. Om MariaDB inte har kompilerats med ett sådant komprimeringsbibliotek, COMPRESS()
returnerar null
.
Du kan kontrollera have_compress
systemvariabel för att se om zlib-komprimeringsbiblioteket är tillgängligt för servern:
SELECT @@have_compress;
Resultat:
+-----------------+ | @@have_compress | +-----------------+ | YES | +-----------------+
I det här fallet är zlib-komprimeringsbiblioteket tillgängligt för servern, och resultatet är YES
.
Om zlib-komprimeringsbiblioteket inte är tillgängligt för servern skulle resultatet bli NO
.