sql >> Databasteknik >  >> RDS >> MariaDB

Hur COMPRESS() fungerar i MariaDB

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 .


  1. SQL WHERE.. IN sats flera kolumner

  2. Tabellen är "skrivskyddad"

  3. Steg-för-steg-guide för installation av MySQL på Windows

  4. Bevilja val på alla tabeller som ägs av en specifik användare