В MariaDB, COMPRESS()
е вградена функция, която компресира низ и връща резултата като двоичен низ.
COMPRESS()
функцията изисква MariaDB да е компилиран с библиотека за компресия като zlib. Ако MariaDB не е компилиран с такава библиотека за компресия, COMPRESS()
връща null
.
Синтаксис
Синтаксисът е така:
COMPRESS(string_to_compress)
Където string_to_compress
е низът, който искате да компресирате.
Пример
Ето един основен пример:
SELECT
LENGTH(REPEAT('z', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";
Резултат:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 50 | 16 | +--------------+------------+
Тук използвах LENGTH()
функция за получаване на дължината в байтове съответно на некомпресирания и компресиран низ. Използвах REPEAT()
функция за повторение на една и съща буква 50 пъти, преди да я компресирате.
Ето още един пример, който използва символа за авторско право (©
):
SELECT
LENGTH(REPEAT('©', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed";
Резултат:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 100 | 17 | +--------------+------------+
Символът за авторско право е двубайтов знак и неговата некомпресирана дължина е два пъти по-голяма от размера на еднобайтов знак. Компресирането на този низ от повтарящи се двубайтови знаци обаче го намалява до размер, подобен на компресирания низ от повтарящи се еднобайтови знаци.
Ето един, който използва трибайтов знак:
SELECT
LENGTH(REPEAT('อ', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed";
Резултат:
+--------------+------------+ | Uncompressed | Compressed | +--------------+------------+ | 150 | 18 | +--------------+------------+
В този случай ефектът е още по-голям. Повтарящият се низ от три байта знаци е намален до подобен размер на повтарящия се низ от един и два байта в предишните примери.
Нулеви аргументи
Предаването на null
връща null
:
SELECT COMPRESS(null);
Резултат:
+----------------+ | COMPRESS(null) | +----------------+ | NULL | +----------------+
Липсващ аргумент
Извикване на COMPRESS()
с грешен брой аргументи или без подаване на аргументи води до грешка:
SELECT COMPRESS();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'COMPRESS'
Проверете за компресия
Както споменахме, COMPRESS()
функцията изисква MariaDB да е компилиран с библиотека за компресия като zlib. Ако MariaDB не е компилиран с такава библиотека за компресия, COMPRESS()
връща null
.
Можете да проверите have_compress
системна променлива, за да видите дали библиотеката за компресиране на zlib е достъпна за сървъра:
SELECT @@have_compress;
Резултат:
+-----------------+ | @@have_compress | +-----------------+ | YES | +-----------------+
В този случай библиотеката за компресиране на zlib е достъпна за сървъра и резултатът е YES
.
Ако библиотеката за компресиране на zlib не е достъпна за сървъра, резултатът ще бъде NO
.