In MariaDB UNCOMPRESSED_LENGTH()
ist eine eingebaute Funktion, die die Länge einer komprimierten Zeichenfolge zurückgibt, bevor sie mit COMPRESS()
komprimiert wurde Funktion.
Syntax
Die Syntax sieht so aus:
UNCOMPRESSED_LENGTH(compressed_string)
Wo compressed_string
ist die komprimierte Zeichenfolge.
Beispiel
Hier ist ein einfaches Beispiel:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Ergebnis:
Hier habe ich den REPEAT()
verwendet Funktion, denselben Buchstaben 50 Mal zu wiederholen. Das Wiederholen des Zeichens macht es zu einem guten Kandidaten für die Komprimierung.
Im Vergleich zum komprimierten String
Hier nochmal im Vergleich zum komprimierten String:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Ergebnis:
+------------+-------------+| Komprimiert | Unkomprimiert |+-----------+-------------+| 16 | 50 |+------------+--------------+
Bytelänge vs. Zeichenlänge
Die UNCOMPRESSED_LENGTH()
gibt die Länge in Bytes an (im Gegensatz zu nur Zeichenlänge).
Wir können dies testen, indem wir ein Multibyte-Zeichen wie das Copyright-Symbol (©
) und dann an Funktionen wie LENGTH()
übergeben um die Länge in Bytes zu erhalten, und CHAR_LENGTH()
um die Zeichenlänge zu erhalten:
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)";
Ergebnis (bei vertikaler Ausgabe):
UNCOMPRESSED_LENGTH():100 Unkomprimiert (Bytes):100 Komprimiert (Bytes):17 Unkomprimiert (Zeichen):50 Komprimiert (Zeichen):17
Hier ist ein weiteres Beispiel, das ein thailändisches Zeichen verwendet:
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)";
Ergebnis (bei vertikaler Ausgabe):
UNCOMPRESSED_LENGTH():150 Unkomprimiert (Bytes):150 Komprimiert (Bytes):18 Unkomprimiert (Zeichen):50 Komprimiert (Zeichen):18
Dieses thailändische Zeichen verwendet 3 Bytes, und daher erhalten wir am Ende 150 Bytes für die unkomprimierte Zeichenfolge, obwohl die Zeichenfolge nur 50 Zeichen lang ist.
Null-Argumente
Übergabe von null
gibt null
zurück :
SELECT UNCOMPRESSED_LENGTH(null);
Ergebnis:
+-----------------------------------+| UNKOMPRIMIERTE_LÄNGE(null) |+-----------------------------------+| NULL |+-----------------------------------+
Fehlendes Argument
Aufruf von UNCOMPRESSED_LENGTH()
mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT UNCOMPRESSED_LENGTH();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion 'UNCOMPRESSED_LENGTH'