2013-05-20 3 views
1

Я столкнулся с проблемой с MySQL, функцией UNCOMPRESS.MySQL Uncompress issue

У меня есть таблица с именем, как user и user_details магазинов компресса значения. В этом случае перед поиском значений из user_details у меня есть UNCOMPRESS it.

Но вопрос после того, как я распаковывать, поиск стал случай- чувствительными.

Как .. например

Если я пытаюсь ниже SQL, он будет искать только для значений, которые содержат CAPITAL ТЕСТИРОВАНИЯ слова и игнорирующих небольших тестирование случаев слова

SELECT * FORM пользователя WHERE UNCOMPRESS (user_details) LIKE '% ИСПЫТАНИЕ%'.

Я хочу нечувствительный к регистру поиск.

ответ

3

Но проблема в том, что я НЕ НЕСЕТЬ, поиск становится случайным.

Это because COMPRESS() «Сжимает строку и возвращает результат в виде бинарной строки.» (курсив мой)

При выполнении LIKE операции на бинарном строкой, binary comparison будет выполнена (который чувствителен к регистру).

Возможно, вам удастся обойти это, поставив CAST() вокруг инструкции COMPRESS().

Но вы, вероятно, не должны этого делать в первую очередь. Это чрезвычайно неэффективный способ поиска через огромное количество данных. MySQL должен распаковать каждую строку для этой операции и не имеет шансов использовать какие-либо ее внутренние методы оптимизации, такие как индексы.

Не используйте COMPRESS() в первую очередь.

+0

Спасибо ... CAST() работал –

+0

@Poonam, пожалуйста, помните, что это действительно, действительно неэффективно. Я бы избавился от COMPRESS() –

2

Попробуйте это:

SELECT * FROM `user` WHERE LOWER(UNCOMPRESS(user_details)) LIKE '%testing%' 

Но Пекка хорошо заостренные или его очень неэффективно. Если вы используете другой вариант MyIsam Engine, это myisampack, который сжимает таблицу отверстий и позволяет обрабатывать запросы.

+0

его не работает –

+0

Это проклятое заклинание в запросе 'FORM' ->' FROM' try now pls – Stephan