压缩文本存储在mysql数据库中,它必须是base64

时间:2014-06-21 01:37:38

标签: python django compression

我从here获得了一个定义压缩文本字段的代码。我需要这样做,因为我存储了太多文本而我的数据库太大了。问题是代码没有任何文档,而且令人困惑。

特别是,我在这里稍微修改了一下代码:

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

在原始代码中,它们在bz2之后编码为 base64 ,它显示不优化但我想知道是否有其他原因可以做到这一点?顺便说一句。我正在使用MySql后端

我还删除了对我没有意义的第11-15行。为什么要在这里解码?

1 个答案:

答案 0 :(得分:0)

对数据进行Base64编码可确保将结果数据安全插入纯文本列(同时牺牲bzip2提供的某些压缩)。作者必须要求将数据插入文本列。如果您使用BLOB类型的列,则无需担心base64部分(并且您将获得更多压缩)。

鉴于MySQL本身支持gzip压缩的事实,链接的示例似乎有点迂回。 See the MySQL documentation regarding compression and encryption functions,特别是COMPRESS()UNCOMPRESS()。如果您有可以存储二进制数据的BLOB列,这些列将很乐意存储您的压缩数据。

这种方法的缺点是,未压缩的数据需要前往服务器进行压缩(或者在通过网络传送回客户端之前未压缩)。这可能是作者原始片段的动机。