V MariaDB COMPRESS()
je vestavěná funkce, která komprimuje řetězec a vrací výsledek jako binární řetězec.
COMPRESS()
funkce vyžaduje, aby MariaDB byla zkompilována s kompresní knihovnou, jako je zlib. Pokud MariaDB nebyla zkompilována s takovou knihovnou komprese, COMPRESS()
vrátí null
.
Syntaxe
Syntaxe vypadá takto:
COMPRESS(string_to_compress)
Kde string_to_compress
je řetězec, který chcete komprimovat.
Příklad
Zde je základní příklad:
SELECT
LENGTH(REPEAT('z', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";
Výsledek:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 50 | 16 | +--------------+------------+
Zde jsem použil LENGTH()
funkce k získání délky v bajtech nekomprimovaného a komprimovaného řetězce. Použil jsem REPEAT()
funkci opakovat stejné písmeno 50krát před jeho komprimací.
Zde je další příklad, který používá symbol autorských práv (©
):
SELECT
LENGTH(REPEAT('©', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";
Výsledek:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 100 | 17 | +--------------+------------+
Symbol autorských práv je dvoubajtový znak a jeho nekomprimovaná délka je dvakrát větší než velikost jednobajtového znaku. Komprimací tohoto řetězce opakovaných dvoubajtových znaků se však sníží na podobnou velikost jako komprimovaný řetězec opakovaných jednobajtových znaků.
Zde je jeden, který používá tříbajtový znak:
SELECT
LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";
Výsledek:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 150 | 18 | +--------------+------------+
V tomto případě je efekt ještě větší. Opakovaný tříbajtový znakový řetězec je zmenšen na podobnou velikost jako opakované jedno a dvoubajtové znakové řetězce v předchozích příkladech.
Nulové argumenty
Předávání null
vrátí null
:
SELECT COMPRESS(null);
Výsledek:
+----------------+ | COMPRESS(null) | +----------------+ | NULL | +----------------+
Chybí argument
Volání COMPRESS()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:
SELECT COMPRESS();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'
Zkontrolujte kompresi
Jak již bylo zmíněno, COMPRESS()
funkce vyžaduje, aby MariaDB byla zkompilována s kompresní knihovnou, jako je zlib. Pokud MariaDB nebyla zkompilována s takovou knihovnou komprese, COMPRESS()
vrátí null
.
Můžete zkontrolovat have_compress
systémové proměnné, abyste viděli, zda je kompresní knihovna zlib pro server přístupná:
SELECT @@have_compress;
Výsledek:
+-----------------+ | @@have_compress | +-----------------+ | YES | +-----------------+
V tomto případě je kompresní knihovna zlib přístupná serveru a výsledek je YES
.
Pokud kompresní knihovna zlib není pro server přístupná, výsledek bude NO
.