In MariaDB, UNCOMPRESSED_LENGTH()
is een ingebouwde functie die de lengte van een gecomprimeerde tekenreeks retourneert voordat deze werd gecomprimeerd met de COMPRESS()
functie.
Syntaxis
De syntaxis gaat als volgt:
UNCOMPRESSED_LENGTH(compressed_string)
Waar compressed_string
is de gecomprimeerde tekenreeks.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Resultaat:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Hier gebruikte ik de REPEAT()
functie om dezelfde letter 50 keer te herhalen. Door het karakter te herhalen is het een goede kandidaat voor compressie.
Vergeleken met de gecomprimeerde string
Hier is het weer, vergeleken met de gecomprimeerde string:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Resultaat:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Bytelengte versus tekenlengte
De UNCOMPRESSED_LENGTH()
rapporteert over de lengte in bytes (in tegenstelling tot alleen tekenlengte).
We kunnen dit testen door een multi-byte teken te gebruiken, zoals het copyright-symbool (©
), en geef het vervolgens door aan functies zoals LENGTH()
om de lengte in bytes te krijgen, en CHAR_LENGTH()
om de tekenlengte te krijgen:
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)";
Resultaat (met verticale uitvoer):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Hier is nog een voorbeeld dat een Thais karakter gebruikt:
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)";
Resultaat (met verticale uitvoer):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Dit Thaise karakter gebruikt 3 bytes, en daarom eindigen we met 150 bytes voor de ongecomprimeerde string, ook al is de string maar 50 karakters lang.
Nullargumenten
Doorgeven van null
retourneert null
:
SELECT UNCOMPRESSED_LENGTH(null);
Resultaat:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Ontbrekend argument
Aanroepen van UNCOMPRESSED_LENGTH()
met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:
SELECT UNCOMPRESSED_LENGTH();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'