最近MySQL遇到一个表,其中有一个字段是存储计算模型的所有值,是一个JSON长字符串,存储为longtext,基本每一个都有100k左右(正常不压缩的情况),表行数不到百万,却占空间几十G,于是想着MySQL能够对专门的表字段进行压缩,经过查询发现,MySQL自带压缩和解压缩函数
- 压缩
使用函数COMPRESS :COMPRESS(COL)即可,如下图,是一个测试压缩的一列。压缩后列格式为blob格式BLOB字段用于存储二进制数据,是一个可以存储大量数据的容器),压缩率能达到80~90%
select id,compress(info) from table
- 解压
使用函数UNCOMPRESS :UNCOMPRESS(col)即可,由于被压缩后代额格式是blob,那么解压后的格式也为blob,还得转换一层才能查看的到,如下所示:
select id,compress(info),uncompress(compress(info)) ,cast(uncompress(compress(info)) as char) from table
- 在JDBC中存取解压缩
在SQL中可以搞定,压缩后转换。接下来
private static void insert () throws SQLException, IOException {
List<MyBlob> blobs=new ArrayList<MyBlob>