压缩文本存储到MySQL数据库,必须使用base64吗

2 投票
1 回答
1376 浏览
提问于 2025-04-18 10:35

我从这里找到了一段代码,用来定义一个压缩文本字段。我需要这样做,因为我存储的文本太多了,导致我的数据库变得很大。问题是这段代码没有任何说明,搞得我有点困惑。

特别是,我在这里对代码做了一些修改:

def get_prep_value(self,value):
    if not value:
        return value
    try:
        tmp = value.encode('utf-8').encode('bz2')
    except Exception:
        return value
    else:
        if len(tmp) > len(value):
            return value
        return tmp

在原始代码中,他们在使用base64编码之前先进行了bz2压缩,我觉得这样做似乎没有优化的效果,但我在想这样做可能还有其他原因吗?顺便说一下,我使用的是MySql作为后端。

我还删除了第11到15行,因为我觉得那部分没有意义……为什么要在这里进行解码呢?

1 个回答

0

把数据进行Base64编码可以确保生成的数据可以安全地放入只支持文本的列中(虽然这样会牺牲一些bzip2提供的压缩效果)。作者可能是因为需要把数据放进文本列里。如果你使用的是BLOB类型的列,就不用担心Base64的部分(而且你会得到更好的压缩效果)。

考虑到MySQL本身就支持gzip压缩,链接中的例子看起来有点绕。可以查看MySQL关于压缩和加密函数的文档,特别是COMPRESS()UNCOMPRESS()这两个函数。如果你有BLOB列可以存储二进制数据,它们会很乐意存储你压缩后的数据。

这种方法的缺点是,未压缩的数据需要先发送到服务器进行压缩(或者在通过网络传回客户端之前先解压缩)。这可能是作者最初写这个代码片段的原因。

撰写回答