W MariaDB, UNCOMPRESSED_LENGTH()
to wbudowana funkcja, która zwraca długość skompresowanego ciągu znaków przed jego skompresowaniem za pomocą COMPRESS()
funkcja.
Składnia
Składnia wygląda tak:
UNCOMPRESSED_LENGTH(compressed_string)
Gdzie compressed_string
to skompresowany ciąg.
Przykład
Oto podstawowy przykład:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));
Wynik:
+------------------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) | +------------------------------------------------+ | 50 | +------------------------------------------------+
Tutaj użyłem funkcji REPEAT()
funkcja powtarzania tej samej litery 50 razy. Powtarzanie znaku czyni go dobrym kandydatem do kompresji.
W porównaniu ze skompresowanym ciągiem
Oto znowu, w porównaniu do skompresowanego ciągu:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";
Wynik:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Długość w bajtach a długość znaków
UNCOMPRESSED_LENGTH()
raporty o długości w bajtach (w przeciwieństwie do długości znaków).
Możemy to przetestować, używając znaku wielobajtowego, takiego jak symbol praw autorskich (©
), a następnie przekazanie go do funkcji takich jak LENGTH()
aby uzyskać długość w bajtach i CHAR_LENGTH()
aby uzyskać długość znaków:
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)";
Wynik (przy użyciu wyjścia pionowego):
UNCOMPRESSED_LENGTH(): 100 Uncompressed (Bytes): 100 Compressed (Bytes): 17 Uncompressed (Char): 50 Compressed (Char): 17
Oto kolejny przykład, w którym użyto znaku tajskiego:
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)";
Wynik (przy użyciu wyjścia pionowego):
UNCOMPRESSED_LENGTH(): 150 Uncompressed (Bytes): 150 Compressed (Bytes): 18 Uncompressed (Char): 50 Compressed (Char): 18
Ten znak tajski używa 3 bajtów i dlatego otrzymujemy 150 bajtów na nieskompresowany ciąg, mimo że ciąg ma tylko 50 znaków.
Argumenty zerowe
Przekazywanie null
zwraca null
:
SELECT UNCOMPRESSED_LENGTH(null);
Wynik:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Brakujący argument
Wywołanie UNCOMPRESSED_LENGTH()
z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:
SELECT UNCOMPRESSED_LENGTH();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'