MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona UNCOMPRESSED_LENGTH() in MariaDB

In MariaDB, UNCOMPRESSED_LENGTH() è una funzione incorporata che restituisce la lunghezza di una stringa compressa prima che fosse compressa con COMPRESS() funzione.

Sintassi

La sintassi è questa:

UNCOMPRESSED_LENGTH(compressed_string)

Dove compressed_string è la stringa compressa.

Esempio

Ecco un esempio di base:

SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));

Risultato:

+------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) |
+------------------------------------------------+
|                                             50 |
+------------------------------------------------+

Qui, ho usato il REPEAT() funzione per ripetere la stessa lettera 50 volte. La ripetizione del carattere lo rende un buon candidato per la compressione.

Rispetto alla stringa compressa

Eccolo di nuovo, rispetto alla stringa compressa:

SELECT
    LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
    UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";

Risultato:

+------------+--------------+
| Compressed | Uncompressed |
+------------+--------------+
|         16 |           50 |
+------------+--------------+

Lunghezza byte vs lunghezza carattere

Il UNCOMPRESSED_LENGTH() rapporti sulla lunghezza in byte (al contrario della sola lunghezza dei caratteri).

Possiamo verificarlo utilizzando un carattere multibyte, come il simbolo del copyright (© ), quindi passandolo a funzioni come LENGTH() per ottenere la lunghezza in byte e CHAR_LENGTH() per ottenere la lunghezza del carattere:

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)";

Risultato (usando l'output verticale):

UNCOMPRESSED_LENGTH(): 100
 Uncompressed (Bytes): 100
   Compressed (Bytes): 17
  Uncompressed (Char): 50
    Compressed (Char): 17

Ecco un altro esempio che utilizza un carattere tailandese:

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)";

Risultato (usando l'output verticale):

UNCOMPRESSED_LENGTH(): 150
 Uncompressed (Bytes): 150
   Compressed (Bytes): 18
  Uncompressed (Char): 50
    Compressed (Char): 18

Questo carattere tailandese utilizza 3 byte e quindi si ottengono 150 byte per la stringa non compressa, anche se la stringa è lunga solo 50 caratteri.

Argomenti nulli

Passaggio null restituisce null :

SELECT UNCOMPRESSED_LENGTH(null);

Risultato:

+---------------------------+
| UNCOMPRESSED_LENGTH(null) |
+---------------------------+
|                      NULL |
+---------------------------+

Argomento mancante

Chiamando UNCOMPRESSED_LENGTH() con il numero errato di argomenti o senza passare alcun argomento genera un errore:

SELECT UNCOMPRESSED_LENGTH();

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'