Как реализовать функцию mysql compress () в php

Я хочу сжать ТЕКСТ для хранения в MySQL. Поэтому я бы просто сделал gzcompress () в php, а затем отправил в mysql, но я также настраиваю полнотекстовый поиск Sphinx, и было бы неплохо, если бы он мог заполнить свой индекс простым запросом, т.е.

select uncompress(thing) from table

Однако я все же хотел бы выполнять сжатие и распаковку приложения на php, а не на mysql, и использовать только функцию mysql uncompress () для индексации sphinx.

В документации mysql о функции сжатия говорится следующее:

Непустые строки хранятся в виде четырехбайтовой длины несжатой строки (сначала младший байт), за которой следует сжатая строка.

Итак, мой вопрос ... как мне построить эту четырехбайтовую длину несжатой строки? После этого сжатый BLOB будет выглядеть так же, как результат функции php gzcompress ().


person Ben    schedule 01.02.2010    source источник


Ответы (1)


никогда не делал этого, но вот некоторые мысли:

1) найдите длину несжатой строки ... функция strlen () должна работать

2) сжать струну ... вы уже сделали эту часть

3) упаковать оба вместе для хранения в mysql, форматируя число так, как того хочет mysql:

функция пакета php: похоже, вам нужно использовать значение формата "V" для длина (беззнаковое длинное ... 32 бита, порядок байтов с прямым порядком байтов)

person Ty W    schedule 01.02.2010
comment
Спасибо. Это была функция упаковки, о которой я не знал. - person Ben; 01.02.2010
comment
В дополнение к правильному ответу выше рассмотрите возможность использования mb_strlen для длины сжатия. Это позволяет избежать проблем с нечетными символами. php.net/manual/en/function.mb-strlen.php - person Digitalis; 04.11.2014