За последние 24 часа нас посетили 17845 программистов и 1684 робота. Сейчас ищут 937 программистов ...

Нуб вопрос по поводу поиска в бд

Тема в разделе "MySQL", создана пользователем DZEN, 14 май 2010.

  1. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Необходимо реализовать очень простой поиск в бд. Очень простой, это значит без Zend_Search_Lucene *неестественные всхлипы, и стоны*. Проблема оказалась мне не по плечу. Привожу часть кода:
    [sql]
    CREATE TABLE `tab` (
    `id_request` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `name` text,
    PRIMARY KEY (`id_request`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    SET NAMES 'utf8';
    SET CHARACTER SET 'utf8';
    SET SESSION collation_connection = 'utf8_general_ci';
    SELECT `fio` FROM `tab` WHERE `name` REGEXP('Фруктовый гусь');
    [/sql]

    Только используя данную комбинацию удалось получать чуть менее чем сносные результаты поиска. Однако при появлении буквы `г` в поиске - вся хитроумная поисковая система начала меня не любить. Побаловавшись с функцией ord() понял, что символы в базе и при простом тексте или $_POST переменной разнятся. Вопрос - может я записываю как-то неверно? Или всё-таки механизм должен быть совсем другим.
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    1. SET NAMES 'utf8'; - достаточно,
    SET CHARACTER SET 'utf8'; и SET SESSION collation_connection = 'utf8_general_ci'; - излишне

    2. CREATE TABLE...
    ..
    `name` text COLLATE - укажите (utf8_general_ci)

    3. Данные для поиска должны быть в utf-8 кодировке.

    4. Поиск осуществляйте либо оператором MATCH либо LIKE.
    Искать подстроку регэкспом глупо.