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
總結
以上是生活随笔為你收集整理的mysql uncompress_如何在php中实现mysql compress()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言第一章节测试,计算机二级C语言教程
- 下一篇: 查看此docker网络连接模式_Dock