I MariaDB, UNCOMPRESSED_LENGTH()
är en inbyggd funktion som returnerar längden på en komprimerad sträng innan den komprimerades med COMPRESS()
funktion.
Syntax
Syntaxen ser ut så här:
UNCOMPRESSED_LENGTH(compressed_string)
Där compressed_string
är den komprimerade strängen.
Exempel
Här är ett grundläggande exempel:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Resultat:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Här använde jag REPEAT()
funktion för att upprepa samma bokstav 50 gånger. Att upprepa karaktären gör det till en bra kandidat för komprimering.
Jämfört med den komprimerade strängen
Här är den igen, jämfört med den komprimerade strängen:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Resultat:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Bytelängd kontra teckenlängd
UNCOMPRESSED_LENGTH()
rapporterar om längden i byte (i motsats till bara teckenlängd).
Vi kan testa detta genom att använda ett multi-byte-tecken, till exempel copyright-symbolen (©
), skickar den sedan till funktioner som LENGTH()
för att få längden i byte och CHAR_LENGTH()
för att få teckenlä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 (med vertikal utdata):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Här är ett annat exempel som använder ett thailändskt tecken:
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 (med vertikal utdata):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Detta thailändska tecken använder 3 byte, och därför slutar vi med 150 byte för den okomprimerade strängen, även om strängen bara är 50 tecken lång.
Nollargument
Skickar null
returnerar null
:
SELECT UNCOMPRESSED_LENGTH(null);
Resultat:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Argument saknas
Anropar UNCOMPRESSED_LENGTH()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:
SELECT UNCOMPRESSED_LENGTH();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'