I MariaDB, UNCOMPRESSED_LENGTH()
er en indbygget funktion, der returnerer længden af en komprimeret streng, før den blev komprimeret med COMPRESS()
funktion.
Syntaks
Syntaksen ser sådan ud:
UNCOMPRESSED_LENGTH(compressed_string)
Hvor compressed_string
er den komprimerede streng.
Eksempel
Her er et grundlæggende eksempel:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Resultat:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Her brugte jeg REPEAT()
funktion for at gentage det samme bogstav 50 gange. Gentagelse af karakteren gør den til en god kandidat til komprimering.
Sammenlignet med den komprimerede streng
Her er den igen, sammenlignet med den komprimerede streng:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Resultat:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Bytelængde vs tegnlængde
UNCOMPRESSED_LENGTH()
rapporterer om længden i bytes (i modsætning til blot tegnlængde).
Vi kan teste dette ved at bruge et multi-byte-tegn, såsom copyright-symbolet (©
), og derefter videregive den til funktioner såsom LENGTH()
for at få længden i bytes, og CHAR_LENGTH()
for at få tegnlængden:
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)";
Resultat (ved hjælp af lodret output):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Her er et andet eksempel, der bruger et thailandsk tegn:
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)";
Resultat (ved hjælp af lodret output):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Dette thailandske tegn bruger 3 bytes, og derfor ender vi med 150 bytes for den ukomprimerede streng, selvom strengen kun er 50 tegn lang.
Nul-argumenter
Sender null
returnerer null
:
SELECT UNCOMPRESSED_LENGTH(null);
Resultat:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Manglende argument
Kalder UNCOMPRESSED_LENGTH()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
SELECT UNCOMPRESSED_LENGTH();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'