sql >> Databáze >  >> RDS >> MariaDB

Jak funguje UNCOMPRESSED_LENGTH() v MariaDB

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'

  1. Jak vytvořit klon vašeho databázového clusteru MySQL nebo PostgreSQL

  2. Jak opravím chybu „Poskytovatel pojmenovaných kanálů, chyba 40 – Nelze otevřít připojení k serveru SQL Server“?

  3. Převeďte datum a čas JS na datum a čas MySQL

  4. Propojení PostgreSQL 9.2.1 s Hibernate