mysql uncompress_如何在php中实现mysql compress()函数
我想壓縮TEXT以存儲在MySQL中。 所以我只是在php中做gzcompress()然后發(fā)送到mysql,但是我也在設(shè)置Sphinx全文搜索,如果它可以用一個簡單的查詢來填充其索引,那就很好了。
select uncompress(thing) from table
但是我仍然想為php中的應(yīng)用程序而不是mysql進行壓縮和解壓縮,并且僅將mysql uncompress()函數(shù)用于sphinx索引。
mysql文檔對壓縮功能的說明如下:
Nonempty strings are stored as a
four-byte length of the uncompressed
string (low byte first), followed by
the compressed string.
所以我的問題是...如何構(gòu)造未壓縮字符串的這四個字節(jié)的長度? 之后,壓縮后的BLOB看起來就像php gzcompress()函數(shù)的結(jié)果。
從來沒有做過,但是這里有一些想法:
1)找到未壓縮字符串的長度... strlen()函數(shù)應(yīng)該起作用
2)壓縮字符串...您已經(jīng)完成了這一部分
3)將兩者打包在一起以存儲在mysql中,按照mysql的要求格式化數(shù)字:
php的pack函數(shù):聽起來您需要使用格式值" V"作為長度(無符號長... 32位,小尾數(shù)字節(jié)順序)
謝謝。 這是我不知道的打包功能。
除了上述正確答案外,請考慮將mb_strlen用于壓縮長度。 這樣可以避免出現(xiàn)奇數(shù)字符的問題。 php.net/manual/en/function.mb-strlen.php
這是我針對這種情況的代碼,對于解壓縮,您還可以使用PHP并在開始的4個字節(jié)之外進行調(diào)整。
mysql的輸出:
mysql :"select hex(compress('1234512345'))"
0A000000789C3334323631350411000AEB01FF
相當(dāng)于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
總結(jié)
以上是生活随笔為你收集整理的mysql uncompress_如何在php中实现mysql compress()函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言第一章节测试,计算机二级C语言教程
- 下一篇: 手把手带你入门Python爬虫(三、Py