2

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

select uncompress(thing) from table

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

mysql 文档说明了它的压缩功能:

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

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

4

2 回答 2

3

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

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

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

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

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

于 2010-02-01T14:32:50.140 回答
0

这是我针对该场景的代码,对于解压缩,您还可以使用 PHP 并在前 4 个字节之外调整 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
于 2016-10-12T16:45:28.107 回答