我想压缩TEXT以存储在MySQL中。所以我只是在php中执行gzcompress()然后发送到mysql,但我也在设置Sphinx全文搜索,如果它可以用简单的查询填充其索引就好了。
select uncompress(thing) from table
但是我仍然希望在php而不是mysql中对应用程序进行压缩和解压缩,并且只使用mysql uncompress()函数进行sphinx索引。
mysql文档说明了关于其压缩函数的以下内容:
非空字符串存储为 未压缩的四字节长度 string(低字节优先),然后是 压缩的字符串。
所以我的问题是......如何构造未压缩字符串的这个四字节长度?之后,压缩的BLOB看起来就像php gzcompress()函数的结果。
答案 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