MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment COMPRESS() fonctionne dans MariaDB

Dans MariaDB, COMPRESS() est une fonction intégrée qui compresse une chaîne et renvoie le résultat sous forme de chaîne binaire.

Le COMPRESS() nécessite que MariaDB ait été compilée avec une bibliothèque de compression telle que zlib. Si MariaDB n'a pas été compilé avec une telle bibliothèque de compression, COMPRESS() renvoie null .

Syntaxe

La syntaxe ressemble à ceci :

COMPRESS(string_to_compress)

string_to_compress est la chaîne que vous souhaitez compresser.

Exemple

Voici un exemple de base :

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

Résultat :

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

Ici, j'ai utilisé le LENGTH() fonction pour obtenir la longueur en octets des chaînes non compressées et compressées respectivement. J'ai utilisé le REPEAT() fonction pour répéter la même lettre 50 fois avant de la compresser.

Voici un autre exemple qui utilise le symbole de copyright (© ):

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

Résultat :

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

Le symbole de copyright est un caractère à deux octets, et sa longueur non compressée est deux fois la taille d'un caractère à un octet. Cependant, la compression de cette chaîne de caractères répétés sur deux octets la ramène à une taille similaire à la chaîne compressée de caractères répétés sur un octet.

En voici une qui utilise un caractère à trois octets :

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

Résultat :

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

Dans ce cas, l'effet est encore plus grand. La chaîne de caractères répétée sur trois octets est réduite à une taille similaire aux chaînes de caractères répétées sur un et deux octets dans les exemples précédents.

Arguments nuls

Passer null renvoie null :

SELECT COMPRESS(null);

Résultat :

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

Argument manquant

Appel de COMPRESS() avec le mauvais nombre d'arguments, ou sans passage d'arguments, une erreur se produit :

SELECT COMPRESS();

Résultat :

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

Vérifier la compression

Comme mentionné, le COMPRESS() nécessite que MariaDB ait été compilée avec une bibliothèque de compression telle que zlib. Si MariaDB n'a pas été compilé avec une telle bibliothèque de compression, COMPRESS() renvoie null .

Vous pouvez vérifier le have_compress variable système pour voir si la bibliothèque de compression zlib est accessible ou non au serveur :

SELECT @@have_compress;

Résultat :

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

Dans ce cas, la bibliothèque de compression zlib est accessible au serveur, et le résultat est YES .

Si la bibliothèque de compression zlib n'est pas accessible au serveur, le résultat serait NO .