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'