sql >> Databáze >  >> RDS >> MariaDB

Jak COMPRESS() funguje v MariaDB

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 .


  1. Jak vypočítat procento pomocí příkazu SQL

  2. Jak objednávat podle názvu měsíce v MySQL

  3. Začínáme s Shareplexem ve Windows na AWS, část 1

  4. Doporučené postupy pro práci s více tabulkami