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'