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'