MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie COMPRESS() in MariaDB funktioniert

In MariaDB COMPRESS() ist eine integrierte Funktion, die eine Zeichenfolge komprimiert und das Ergebnis als binäre Zeichenfolge zurückgibt.

Das COMPRESS() Die Funktion erfordert, dass MariaDB mit einer Komprimierungsbibliothek wie zlib kompiliert wurde. Wenn MariaDB nicht mit einer solchen Komprimierungsbibliothek kompiliert wurde, COMPRESS() gibt null zurück .

Syntax

Die Syntax lautet wie folgt:

COMPRESS(string_to_compress)

Wobei string_to_compress ist die Zeichenfolge, die Sie komprimieren möchten.

Beispiel

Hier ist ein einfaches Beispiel:

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

Ergebnis:

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

Hier habe ich die LENGTH() verwendet -Funktion, um die Länge in Bytes der unkomprimierten bzw. komprimierten Zeichenfolgen abzurufen. Ich habe den REPEAT() verwendet Funktion, denselben Buchstaben 50 Mal zu wiederholen, bevor er komprimiert wird.

Hier ist ein weiteres Beispiel, das das Copyright-Symbol (© ):

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

Ergebnis:

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

Das Copyright-Symbol ist ein Zwei-Byte-Zeichen, und seine unkomprimierte Länge ist doppelt so groß wie ein Ein-Byte-Zeichen. Das Komprimieren dieser Zeichenfolge aus wiederholten Zwei-Byte-Zeichen bringt sie jedoch auf eine ähnliche Größe wie die komprimierte Zeichenfolge aus wiederholten Ein-Byte-Zeichen.

Hier ist einer, der ein Drei-Byte-Zeichen verwendet:

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

Ergebnis:

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

In diesem Fall ist der Effekt sogar noch größer. Die wiederholte 3-Byte-Zeichenfolge wird auf eine ähnliche Größe reduziert wie die wiederholten 1- und 2-Byte-Zeichenfolgen in den vorherigen Beispielen.

Null-Argumente

Übergabe von null gibt null zurück :

SELECT COMPRESS(null);

Ergebnis:

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

Fehlendes Argument

Aufruf von COMPRESS() mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT COMPRESS();

Ergebnis:

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

Auf Komprimierung prüfen

Wie bereits erwähnt, die COMPRESS() Die Funktion erfordert, dass MariaDB mit einer Komprimierungsbibliothek wie zlib kompiliert wurde. Wenn MariaDB nicht mit einer solchen Komprimierungsbibliothek kompiliert wurde, COMPRESS() gibt null zurück .

Sie können den have_compress überprüfen Systemvariable, um zu sehen, ob der Server auf die zlib-Komprimierungsbibliothek zugreifen kann:

SELECT @@have_compress;

Ergebnis:

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

In diesem Fall ist die zlib-Komprimierungsbibliothek für den Server zugänglich und das Ergebnis ist YES .

Wenn der Server nicht auf die zlib-Komprimierungsbibliothek zugreifen kann, wäre das Ergebnis NO .