В MariaDB, UNCOMPRESSED_LENGTH() е вградена функция, която връща дължината на компресиран низ, преди да бъде компресиран с COMPRESS() функция.
Синтаксис
Синтаксисът е така:
UNCOMPRESSED_LENGTH(compressed_string)
Където compressed_string е компресираният низ.
Пример
Ето един основен пример:
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))); Резултат:
+------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) |
+------------------------------------------------+
| 50 |
+------------------------------------------------+
Тук използвах REPEAT() функция за повтаряне на една и съща буква 50 пъти. Повтарянето на символа го прави добър кандидат за компресиране.
В сравнение с компресирания низ
Ето го отново в сравнение с компресирания низ:
SELECT
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed"; Резултат:
+------------+--------------+ | Compressed | Uncompressed | +------------+--------------+ | 16 | 50 | +------------+--------------+
Дължина на байт спрямо дължина на символа
UNCOMPRESSED_LENGTH() отчита дължината в байтове (за разлика от само дължината на символа).
Можем да тестваме това, като използваме многобайтов знак, като символа за авторско право (© ), след което го предава на функции като LENGTH() за да получите дължината в байтове и CHAR_LENGTH() за да получите дължината на символа:
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)"; Резултат (с помощта на вертикален изход):
UNCOMPRESSED_LENGTH(): 100
Uncompressed (Bytes): 100
Compressed (Bytes): 17
Uncompressed (Char): 50
Compressed (Char): 17 Ето още един пример, който използва тайландски знак:
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)"; Резултат (с помощта на вертикален изход):
UNCOMPRESSED_LENGTH(): 150
Uncompressed (Bytes): 150
Compressed (Bytes): 18
Uncompressed (Char): 50
Compressed (Char): 18 Този тайландски знак използва 3 байта и затова в крайна сметка получаваме 150 байта за некомпресирания низ, въпреки че низът е дълъг само 50 знака.
Нулеви аргументи
Предаването на null връща null :
SELECT UNCOMPRESSED_LENGTH(null); Резултат:
+---------------------------+ | UNCOMPRESSED_LENGTH(null) | +---------------------------+ | NULL | +---------------------------+
Липсващ аргумент
Извикване на UNCOMPRESSED_LENGTH() с грешен брой аргументи или без подаване на аргументи води до грешка:
SELECT UNCOMPRESSED_LENGTH(); Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'