MySQL COMPRESS() 函数

MySQL COMPRESS() 函数压缩一个字符串并返回压缩后的二进制字符串。

要解压缩 COMPRESS() 函数压缩后的内容,请使用 UNCOMPRESS() 函数

COMPRESS() 语法

这里是 MySQL COMPRESS() 函数的语法:

COMPRESS(str)

参数

str
必需的。一个要压缩的字符串。

返回值

MySQL COMPRESS() 函数对指定的字符串 str 进行压缩,并将压缩结果作为二进制字符串返回。

如果参数为 NULL,MySQL COMPRESS() 函数返回 NULL

COMPRESS() 示例

要压缩字符串 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) 返回了一个长度为 3000 的字符串,经过 MySQL COMPRESS() 压缩后,长度只有 33。

要计算一个压缩字符串的原始字符串的长度,请使用 UNCOMPRESSED_LENGTH() 函数。

SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('abc', 1000)));
+----------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('abc', 1000))) |
+----------------------------------------------------+
|                                               3000 |
+----------------------------------------------------+