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() 是一个内置函数,它压缩字符串并将结果作为二进制字符串返回。