MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona COMPRESS() in MariaDB

In MariaDB, COMPRESS() è una funzione incorporata che comprime una stringa e restituisce il risultato come stringa binaria.

Il COMPRESS() la funzione richiede che MariaDB sia stata compilata con una libreria di compressione come zlib. Se MariaDB non è stata compilata con tale libreria di compressione, COMPRESS() restituisce null .

Sintassi

La sintassi è questa:

COMPRESS(string_to_compress)

Dove string_to_compress è la stringa che vuoi comprimere.

Esempio

Ecco un esempio di base:

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

Risultato:

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

Qui, ho usato il LENGTH() funzione per ottenere rispettivamente la lunghezza in byte delle stringhe non compresse e compresse. Ho usato REPEAT() funzione per ripetere la stessa lettera 50 volte prima di comprimerla.

Ecco un altro esempio che utilizza il simbolo del copyright (© ):

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

Risultato:

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

Il simbolo del copyright è un carattere a due byte e la sua lunghezza non compressa è il doppio di un carattere a byte singolo. Tuttavia, la compressione di questa stringa di caratteri ripetuti a due byte la riduce a una dimensione simile alla stringa compressa di caratteri ripetuti a byte singolo.

Eccone uno che utilizza un carattere a tre byte:

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

Risultato:

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

In questo caso, l'effetto è ancora maggiore. La stringa di caratteri ripetuta di tre byte viene ridotta a una dimensione simile alle stringhe di caratteri ripetute di uno e due byte negli esempi precedenti.

Argomenti nulli

Passaggio null restituisce null :

SELECT COMPRESS(null);

Risultato:

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

Argomento mancante

Chiamando COMPRESS() con il numero errato di argomenti o senza passare alcun argomento genera un errore:

SELECT COMPRESS();

Risultato:

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

Verifica la compressione

Come accennato, il COMPRESS() la funzione richiede che MariaDB sia stata compilata con una libreria di compressione come zlib. Se MariaDB non è stata compilata con tale libreria di compressione, COMPRESS() restituisce null .

Puoi controllare have_compress variabile di sistema per vedere se la libreria di compressione zlib è accessibile o meno al server:

SELECT @@have_compress;

Risultato:

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

In questo caso, la libreria di compressione zlib è accessibile al server e il risultato è YES .

Se la libreria di compressione zlib non è accessibile al server, il risultato sarebbe NO .