Релевантный поиск ищет с учетом регистра. Как сделать регистронезависимый релевант поиск без изменения бд. Или оставить как есть?

Таблица

CREATE TABLE `posts` (
`pid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid_posts` int(10) unsigned NOT NULL,
`postacc` tinyint(1) unsigned NOT NULL,
`postcomacc` tinyint(1) unsigned NOT NULL,
`date_posts` datetime NOT NULL,
`title_posts` varchar(100) COLLATE utf8_bin NOT NULL,
`txt_posts` varchar(10000) COLLATE utf8_bin NOT NULL,
`tags_posts` varchar(50) COLLATE utf8_bin NOT NULL,
`updt_posts` datetime DEFAULT NULL,
`postpic_posts` varchar(50) COLLATE utf8_bin DEFAULT NULL,
`count_postvs` int(10) unsigned NOT NULL DEFAULT '0',
`ip_posts` varchar(39) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`pid`),
UNIQUE KEY `pid` (`pid`) USING BTREE,
KEY `uid_posts` (`uid_posts`) USING BTREE,
KEY `postacc` (`postacc`) USING BTREE,
KEY `postcomacc` (`postcomacc`) USING HASH,
FULLTEXT KEY `idx_posts_txt_posts` (`txt_posts`),
FULLTEXT KEY `idx_posts_title_posts` (`title_posts`),
FULLTEXT KEY `idx_posts_title_posts_txt_posts` (`title_posts`,`txt_posts`),
CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`uid_posts`) REFERENCES `usopt` (`uid_usopt`)
) ENGINE=InnoDB AUTO_INCREMENT=629 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

Запрос (на самом деле он чуть не такой, но суть вопроса и так понятна(?). Струтуру таблицы я привел для того чтобы COLLATE показать).

select match (txt_posts,title_posts) against (?) as rlv, pid from posts 
  join users on uid_posts=uid_users 
    where match (txt_posts,title_posts) against (?) and us_status=0 and postacc=1

Нужно, без изменений бд и без преобразований на лету в нижний регистр заголовка и текста поста, релевантно находить посты. Сейчас всё работает, но ищет с учетом регистра. Я хочу оставить регистроЗАВИСИМЫЙ поиск.

Но всё-таки интересно как сделать регистроНЕзависимый.

Наверное вы отправите меня на https://dev.mysql.com/doc/ ? Я не против, если конкретно на нужную страницу, то я с радостью туда направлюсь.

ДОПИСЫВАЮ: Конект у меня по (то етсь после коннекта устанавл кодировка) utf8.

А set sql_mode=traditional я давно использую после просмотра видео про мягкость mysql. Кажись оно называется "как помыть кота"

 mysqli_set_charset($ddb, "utf8");
'set sql_mode=traditional';

Ответы (1 шт):

Автор решения: InDevX

COLLATE\СOLLATION отвечает за сравнение данных в бд.

COLLATE=utf8_bin - вот где причину стоит искать.

Если не ошибаюсь, utf8_bin сравнивает данные используя юникод позицию (code point), и в итоге получаем "регистро-зависимость".

Если нужен регистро-независимый вариант, к примеру, можно использовать utf8_general_ci сравнивает с использованием правил конкретного языка, без учета регистра.

→ Ссылка