Полнотекстный поиск по base64 в MySQL

Цукер

Сам себе призедент
Регистрация
5 Мар 2008
Сообщения
410
Реакции
379
Добрый день
Назрела следующая задача:
Есть в таблице несколько полей значения в которых покрыты base64 соответвенно обычный LIKE не использовать.

Сталкивался кто либо с такой задей и как это реализовать?

*base64 используеться чтобы не было проблем с кодировкой, потому запись текста в открытом виде вместо base64 не вариант. кодировок куча - не все можно сконвертить да и опредлить верно тоже не всегда выходит.
 
Последнее редактирование модератором:
Искомое слово кодировать в base64 и потом искать по его хешу с помощью обычного like — не?
Ну или так:
select * from tbl where decode(textdata, 'base64') = 'blablabla'
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
По идее, если у вас разные кодировки, то искаться будут слова в той кодировке, в которой вы вводите поисковый запрос. По крайней мере это касается русскоязычного алфавита.
 
кодирование искомого слова будет работать нормально не всегда,
только в случае если его длина - нечетное число, насколько я помню.
Полнотекстный поиск можно сделать так

Код:
SELECT * FROM `table` WHERE FROM_BASE64(`field`) LIKE '%$term%'

FROM_BASE64 доступна с MySQL версии 5.6.1, для более ранних можно прикрутить Для просмотра ссылки Войди или Зарегистрируйся
 
Искать по хешу base64 вообще не вариант:
PHP:
babl@malamut:~$ php -r 'echo base64_encode("бобер");'
0LHQvtCx0LXRgA==
babl@malamut:~$ php -r 'echo base64_encode("привет бобер");'
0L/RgNC40LLQtdGCINCx0L7QsdC10YA=babl@malamut:~$ 
babl@malamut:~$ php -r 'echo base64_encode("привет a бобер");'
0L/RgNC40LLQtdGCIGEg0LHQvtCx0LXRgA==babl@malamut:~$
как видишь, слово бобер во втором случае не будет найдено.

использовать mysql decode и from_base64 в условиях и еше лайкать по ним - это беспредел, за такое надо расстреливать у стены.

Так что мой тебе совет, разберись с UTF-8 и не изобретай велосипедов. UTF для того и создавалась.
 
Лучше бы привести все к одной кодировке UTF-8, пока выглядит так что вы пытаетесь взять приз по самоиздевательству и дальше только сложнее будет. Кодировка определяется хорошо в большинстве случаев, попробуйте решить эту задачу.
 
Назад
Сверху