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'