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)
Où 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'