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

Comment fonctionne UNCOMPRESSED_LENGTH() dans MariaDB

Dans MariaDB, UNCOMPRESSED_LENGTH() est une fonction intégrée qui renvoie la longueur d'une chaîne compressée avant qu'elle ne soit compressée avec le COMPRESS() fonction.

Syntaxe

La syntaxe ressemble à ceci :

UNCOMPRESSED_LENGTH(compressed_string)

compressed_string est la chaîne compressée.

Exemple

Voici un exemple de base :

SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));

Résultat :

+------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) |
+------------------------------------------------+
|                                             50 |
+------------------------------------------------+

Ici, j'ai utilisé le REPEAT() fonction pour répéter la même lettre 50 fois. La répétition du caractère en fait un bon candidat pour la compression.

Comparé à la chaîne compressée

La voici à nouveau, comparée à la chaîne compressée :

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

Résultat :

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

Longueur en octets par rapport à la longueur en caractères

Le UNCOMPRESSED_LENGTH() rapporte la longueur en octets (par opposition à la longueur des caractères uniquement).

Nous pouvons tester cela en utilisant un caractère multi-octets, tel que le symbole de copyright (© ), puis en le passant à des fonctions telles que LENGTH() pour obtenir la longueur en octets, et CHAR_LENGTH() pour obtenir la longueur des caractères :

SELECT 
    UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('©', 50))) AS "UNCOMPRESSED_LENGTH()",
    LENGTH(REPEAT('©', 50)) AS "Uncompressed (Bytes)",
    LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed (Bytes)",
    CHAR_LENGTH(REPEAT('©', 50)) AS "Uncompressed (Char)",
    CHAR_LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed (Char)";

Résultat (en utilisant la sortie verticale) :

UNCOMPRESSED_LENGTH(): 100
 Uncompressed (Bytes): 100
   Compressed (Bytes): 17
  Uncompressed (Char): 50
    Compressed (Char): 17

Voici un autre exemple qui utilise un caractère thaï :

SELECT 
    UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('อ', 50))) AS "UNCOMPRESSED_LENGTH()",
    LENGTH(REPEAT('อ', 50)) AS "Uncompressed (Bytes)",
    LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed (Bytes)",
    CHAR_LENGTH(REPEAT('อ', 50)) AS "Uncompressed (Char)",
    CHAR_LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed (Char)";

Résultat (en utilisant la sortie verticale) :

UNCOMPRESSED_LENGTH(): 150
 Uncompressed (Bytes): 150
   Compressed (Bytes): 18
  Uncompressed (Char): 50
    Compressed (Char): 18

Ce caractère thaï utilise 3 octets, et donc nous nous retrouvons avec 150 octets pour la chaîne non compressée, même si la chaîne ne fait que 50 caractères.

Arguments nuls

Passer null renvoie null :

SELECT UNCOMPRESSED_LENGTH(null);

Résultat :

+---------------------------+
| UNCOMPRESSED_LENGTH(null) |
+---------------------------+
|                      NULL |
+---------------------------+

Argument manquant

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

SELECT UNCOMPRESSED_LENGTH();

Résultat :

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