V MariaDB, UNCOMPRESSED_LENGTH()
je vestavěná funkce, která vrací délku komprimovaného řetězce předtím, než byl komprimován pomocí COMPRESS()
funkce.
Syntaxe
Syntaxe vypadá takto:
UNCOMPRESSED_LENGTH(compressed_string)
Kde compressed_string
je komprimovaný řetězec.
Příklad
Zde je základní příklad:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Výsledek:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Zde jsem použil REPEAT()
funkci opakovat stejné písmeno 50krát. Opakování znaku z něj dělá dobrého kandidáta pro kompresi.
Ve srovnání s komprimovaným řetězcem
Tady je to znovu ve srovnání s komprimovaným řetězcem:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Výsledek:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Bajtová délka versus délka znaku
UNCOMPRESSED_LENGTH()
uvádí délku v bajtech (na rozdíl od pouhé délky znaků).
Můžeme to otestovat pomocí vícebajtového znaku, jako je symbol autorských práv (©
), poté jej předáte funkcím, jako je LENGTH()
k získání délky v bajtech a CHAR_LENGTH()
získat délku znaku:
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)";
Výsledek (při použití vertikálního výstupu):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Zde je další příklad, který používá thajský znak:
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)";
Výsledek (při použití vertikálního výstupu):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Tento thajský znak používá 3 bajty, a proto skončíme se 150 bajty pro nekomprimovaný řetězec, i když má řetězec pouze 50 znaků.
Nulové argumenty
Předávání null
vrátí null
:
SELECT UNCOMPRESSED_LENGTH(null);
Výsledek:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Chybí argument
Volání UNCOMPRESSED_LENGTH()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:
SELECT UNCOMPRESSED_LENGTH();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'