MariaDB COMPRESS() 函数使用指南
在 MariaDB 中,COMPRESS()
是一个内置函数,它压缩字符串并将结果作为二进制字符串返回。
要解压缩 COMPRESS()
函数压缩后的内容,请使用 UNCOMPRESS()
函数。
检查可用性
MariaDB COMPRESS()
函数要求 MariaDB 使用压缩库(如 zlib)进行编译。如果 MariaDB 尚未使用这样的压缩库进行编译,则 COMPRESS()
不能正常工作,它将返回 NULL
。
要确定 COMPRESS()
函数在当前 MariaDB 数据库服务器中是否能正常工作,请使用系统变量 have_compress
。
这个语句返回当前 MariaDB 数据库服务器是否支持压缩:
SELECT @@have_compress;
输出:
+-----------------+
| @@have_compress |
+-----------------+
| YES |
+-----------------+
如果服务器可依访问 zlib 压缩库,结果是 YES
,否则结果将是 NO
。
MariaDB COMPRESS()
语法
这里是 MariaDB COMPRESS()
函数的语法:
COMPRESS(str)
参数
str
- 必需的。一个要压缩的字符串。
返回值
MariaDB COMPRESS()
函数对指定的字符串 str
进行压缩,并将压缩结果作为二进制字符串返回。
如果参数为 NULL
,MariaDB COMPRESS()
函数返回 NULL
。
MariaDB COMPRESS()
示例
示例 1
要压缩字符串 hello
,请使用如下语句:
SELECT COMPRESS('hello'), LENGTH(COMPRESS('hello'));
输出:
+--------------------------------------+---------------------------+
| COMPRESS('hello') | LENGTH(COMPRESS('hello')) |
+--------------------------------------+---------------------------+
| 0x05000000789CCB48CDC9C90700062C0215 | 17 |
+--------------------------------------+---------------------------+
这里, 输出显示的是二进制字符串对应的十六进制的字符串。要禁用显示十六进制,请在登录时使用 --binary-as-hex=false
参数以禁用将二进制内容显示为十六进制。
这里使用了 LENGTH()
函数展示了压缩后的数据长度。
要压缩空字符串,请使用如下语句:
SELECT COMPRESS(''), LENGTH(COMPRESS(''));
输出:
+----------------------------+----------------------+
| COMPRESS('') | LENGTH(COMPRESS('')) |
+----------------------------+----------------------+
| 0x | 0 |
+----------------------------+----------------------+
从上面我们可以看出,很短的字符串压缩后的长度比原始字符串更长。让我们看一个压缩很长字符串的例子。在下面的例子中,我们使用 REPEAT()
函数构造了一个长度为 3000 字符串。
SELECT LENGTH(COMPRESS(REPEAT('abc', 1000)));
输出:
+---------------------------------------+
| LENGTH(COMPRESS(REPEAT('abc', 1000))) |
+---------------------------------------+
| 33 |
+---------------------------------------+
这里, REPEAT('abc', 1000)
函数将 'abc'
重复 1000 次,并返回一个长度为 3000 的字符串,经过 MariaDB COMPRESS()
压缩后,长度只有 33。
要计算一个压缩字符串的原始字符串的长度,请使用 UNCOMPRESSED_LENGTH()
函数。
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('abc', 1000)));
输出:
+----------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('abc', 1000))) |
+----------------------------------------------------+
| 3000 |
+----------------------------------------------------+
示例 2
您可以在下面这一个示例中比较压缩前后的长度:
下面是一个基本示例:
SELECT
LENGTH(REPEAT('z', 50)) AS "Uncompressed",
LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed";
输出:
+--------------+------------+
| Uncompressed | Compressed |
+--------------+------------+
| 50 | 16 |
+--------------+------------+
结论
在 MariaDB 中,COMPRESS()
是一个内置函数,它压缩字符串并将结果作为二进制字符串返回。