mysql uncompress_如何在php中实现mysql compress()函数

我想压缩TEXT以存储在MySQL中。 所以我只是在php中做gzcompress()然后发送到mysql,但是我也在设置Sphinx全文搜索,如果它可以用一个简单的查询来填充其索引,那就很好了。

select uncompress(thing) from table

但是我仍然想为php中的应用程序而不是mysql进行压缩和解压缩,并且仅将mysql uncompress()函数用于sphinx索引。

mysql文档对压缩功能的说明如下:

Nonempty strings are stored as a

four-byte length of the uncompressed

string (low byte first), followed by

the compressed string.

所以我的问题是...如何构造未压缩字符串的这四个字节的长度? 之后,压缩后的BLOB看起来就像php gzcompress()函数的结果。

从来没有做过,但是这里有一些想法:

1)找到未压缩字符串的长度... strlen()函数应该起作用

2)压缩字符串...您已经完成了这一部分

3)将两者打包在一起以存储在mysql中,按照mysql的要求格式化数字:

php的pack函数:听起来您需要使用格式值" V"作为长度(无符号长... 32位,小尾数字节顺序)

谢谢。 这是我不知道的打包功能。

除了上述正确答案外,请考虑将mb_strlen用于压缩长度。 这样可以避免出现奇数字符的问题。 php.net/manual/en/function.mb-strlen.php

这是我针对这种情况的代码,对于解压缩,您还可以使用PHP并在开始的4个字节之外进行调整。

mysql的输出:

mysql :"select hex(compress('1234512345'))"

0A000000789C3334323631350411000AEB01FF

相当于php:

$string="1234512345";

$data=gzcompress($string);

$len=mb_strlen($string);

$head=pack('V',$len);

echo($head);

echo($data);

PHP的输出:

php test.php  | hexdump -C

00000000  0a 00 00 00 78 9c 33 34  32 36 31 35 04 11 00 0a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值