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

Тема в разделе "Базы данных", создана пользователем Цукер, 28 янв 2015.

Модераторы: latteo
  1. Цукер

    Цукер Сам себе призедент

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

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

    *base64 используеться чтобы не было проблем с кодировкой, потому запись текста в открытом виде вместо base64 не вариант. кодировок куча - не все можно сконвертить да и опредлить верно тоже не всегда выходит.
     
    Последнее редактирование модератором: 28 янв 2015
  2. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Последнее редактирование: 28 янв 2015
    Цукер и latteo нравится это.
  3. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    По идее, если у вас разные кодировки, то искаться будут слова в той кодировке, в которой вы вводите поисковый запрос. По крайней мере это касается русскоязычного алфавита.
     
  4. warg

    warg Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    122
    Симпатии:
    122
    кодирование искомого слова будет работать нормально не всегда,
    только в случае если его длина - нечетное число, насколько я помню.
    Полнотекстный поиск можно сделать так

    Код:
    SELECT * FROM `table` WHERE FROM_BASE64(`field`) LIKE '%$term%'
    
    FROM_BASE64 доступна с MySQL версии 5.6.1, для более ранних можно прикрутить base64.sql
     
    latteo нравится это.
  5. BaBL

    BaBL Постоялец

    Регистр.:
    13 ноя 2012
    Сообщения:
    144
    Симпатии:
    87
    Искать по хешу base64 вообще не вариант:
    PHP:
    babl@malamut:~$ php -'echo base64_encode("бобер");'
    0LHQvtCx0LXRgA==
    babl@malamut:~$ php -'echo base64_encode("привет бобер");'
    0L/RgNC40LLQtdGCINCx0L7QsdC10YA=babl@malamut:~$ 
    babl@malamut:~$ php -'echo base64_encode("привет a бобер");'
    0L/RgNC40LLQtdGCIGEg0LHQvtCx0LXRgA==babl@malamut:~$ 
    как видишь, слово бобер во втором случае не будет найдено.

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

    Так что мой тебе совет, разберись с UTF-8 и не изобретай велосипедов. UTF для того и создавалась.
     
  6. xenator

    xenator Создатель

    Регистр.:
    6 июл 2009
    Сообщения:
    46
    Симпатии:
    4
    Лучше бы привести все к одной кодировке UTF-8, пока выглядит так что вы пытаетесь взять приз по самоиздевательству и дальше только сложнее будет. Кодировка определяется хорошо в большинстве случаев, попробуйте решить эту задачу.