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

时间:2010-02-01 13:51:06

标签: php mysql compression sphinx

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

select uncompress(thing) from table

但是我仍然希望在php而不是mysql中对应用程序进行压缩和解压缩,并且只使用mysql uncompress()函数进行sphinx索引。

mysql文档说明了关于其压缩函数的以下内容:

  

非空字符串存储为   未压缩的四字节长度   string(低字节优先),然后是   压缩的字符串。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

3)将两者打包在一起存放在mysql中,格式化为mysql想要的数字:

php的pack function:听起来你需要使用格式值“V”作为长度(无符号长... 32位,小端字节顺序)

答案 1 :(得分:0)

这是我的代码,对于解压缩,你也可以使用PHP和前4个字节的djust substr。
输出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