日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2025/3/15 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql uncompress_如何在php中实现mysql compress()函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我想壓縮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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。