W MariaDB, COMPRESS()
to wbudowana funkcja, która kompresuje ciąg i zwraca wynik jako ciąg binarny.
COMPRESS()
funkcja wymaga, aby MariaDB została skompilowana z biblioteką kompresji, taką jak zlib. Jeśli MariaDB nie została skompilowana z taką biblioteką kompresji, COMPRESS()
zwraca null
.
Składnia
Składnia wygląda tak:
COMPRESS(string_to_compress)
Gdzie string_to_compress
to ciąg, który chcesz skompresować.
Przykład
Oto podstawowy przykład:
SELECT
LENGTH(REPEAT('z', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";
Wynik:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 50 | 16 | +--------------+------------+
Tutaj użyłem LENGTH()
funkcja, aby uzyskać długość w bajtach odpowiednio nieskompresowanych i skompresowanych ciągów. Użyłem REPEAT()
funkcja powtarzania tej samej litery 50 razy przed jej skompresowaniem.
Oto kolejny przykład, w którym zastosowano symbol praw autorskich (©
):
SELECT
LENGTH(REPEAT('©', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";
Wynik:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 100 | 17 | +--------------+------------+
Symbol praw autorskich to znak dwubajtowy, a jego nieskompresowana długość jest dwukrotnie większa niż znak jednobajtowy. Jednak skompresowanie tego ciągu powtarzających się znaków dwubajtowych sprowadza go do rozmiaru podobnego do skompresowanego ciągu powtarzających się znaków jednobajtowych.
Oto taki, który używa znaku trzybajtowego:
SELECT
LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";
Wynik:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 150 | 18 | +--------------+------------+
W tym przypadku efekt jest jeszcze większy. Powtarzany trzybajtowy ciąg znaków jest redukowany do rozmiaru podobnego do powtarzanych jedno- i dwubajtowych ciągów znaków w poprzednich przykładach.
Argumenty zerowe
Przekazywanie null
zwraca null
:
SELECT COMPRESS(null);
Wynik:
+----------------+ | COMPRESS(null) | +----------------+ | NULL | +----------------+
Brakujący argument
Wywołanie COMPRESS()
z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:
SELECT COMPRESS();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'
Sprawdź kompresję
Jak wspomniano, COMPRESS()
funkcja wymaga, aby MariaDB została skompilowana z biblioteką kompresji, taką jak zlib. Jeśli MariaDB nie została skompilowana z taką biblioteką kompresji, COMPRESS()
zwraca null
.
Możesz sprawdzić have_compress
zmienna systemowa, aby sprawdzić, czy biblioteka kompresji zlib jest dostępna dla serwera:
SELECT @@have_compress;
Wynik:
+-----------------+ | @@have_compress | +-----------------+ | YES | +-----------------+
W tym przypadku biblioteka kompresji zlib jest dostępna dla serwera, a wynikiem jest YES
.
Jeśli biblioteka kompresji zlib nie jest dostępna dla serwera, wynikiem będzie NO
.