sql >> Database >  >> RDS >> MariaDB

Hoe COMPRESS() werkt in MariaDB

In MariaDB, COMPRESS() is een ingebouwde functie die een string comprimeert en het resultaat als een binaire string teruggeeft.

De COMPRESS() functie vereist dat MariaDB is gecompileerd met een compressiebibliotheek zoals zlib. Als MariaDB niet is gecompileerd met een dergelijke compressiebibliotheek, COMPRESS() retourneert null .

Syntaxis

De syntaxis gaat als volgt:

COMPRESS(string_to_compress)

Waar string_to_compress is de tekenreeks die u wilt comprimeren.

Voorbeeld

Hier is een eenvoudig voorbeeld:

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

Resultaat:

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

Hier gebruikte ik de LENGTH() functie om de lengte in bytes van respectievelijk de ongecomprimeerde en gecomprimeerde strings te krijgen. Ik gebruikte de REPEAT() functie om dezelfde letter 50 keer te herhalen voordat deze wordt gecomprimeerd.

Hier is nog een voorbeeld dat het copyright-symbool gebruikt (© ):

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

Resultaat:

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

Het copyright-symbool is een teken van twee bytes en de ongecomprimeerde lengte is twee keer zo groot als een teken van één byte. Door deze reeks herhaalde tekens van twee bytes te comprimeren, wordt deze echter teruggebracht tot een vergelijkbare grootte als de gecomprimeerde reeks van herhaalde tekens van één bytes.

Hier is er een die een teken van drie bytes gebruikt:

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

Resultaat:

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

In dit geval is het effect nog groter. De herhaalde tekenreeks van drie bytes wordt verkleind tot een vergelijkbare grootte als de herhaalde tekenreeksen van één en twee bytes in de vorige voorbeelden.

Nullargumenten

Doorgeven van null retourneert null :

SELECT COMPRESS(null);

Resultaat:

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

Ontbrekend argument

COMPRESS() . aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:

SELECT COMPRESS();

Resultaat:

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

Controleer op compressie

Zoals gezegd, de COMPRESS() functie vereist dat MariaDB is gecompileerd met een compressiebibliotheek zoals zlib. Als MariaDB niet is gecompileerd met een dergelijke compressiebibliotheek, COMPRESS() retourneert null .

U kunt de have_compress . controleren systeemvariabele om te zien of de zlib-compressiebibliotheek toegankelijk is voor de server:

SELECT @@have_compress;

Resultaat:

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

In dit geval is de zlib-compressiebibliotheek toegankelijk voor de server en het resultaat is YES .

Als de zlib-compressiebibliotheek niet toegankelijk is voor de server, is het resultaat NO .


  1. Verbind ODBC-toepassingen op Windows met QuickBooks Online

  2. Waarom en wanneer is een LEFT JOIN met voorwaarde in de WHERE-clausule niet gelijk aan dezelfde LEFT JOIN in ON?

  3. Lange binaire (onbewerkte gegevens) strings opslaan

  4. Gegevens importeren in een MySQL-database