Как провести поиск с учетом акцента в MySql



у меня есть таблица MySQL с utf8 общие параметры сортировки ci. В таблице, я вижу две записи:



Абадской

апартаменты Abacus



Я использую запрос, который выглядит так:



SELECT *  FROM `words` WHERE `word` = 'abád'


результат запроса дает оба слова:



Абадской

апартаменты Abacus



есть ли способ указать, что я только хочу, чтобы MySQL нашел слово с ударением? Я хочу, чтобы запрос возвращал только



апартаменты Abacus



Я тоже пробовал это запрос:



SELECT *  FROM `words` WHERE BINARY `word` = 'abád'


это не дает мне никаких результатов. Спасибо за помощь.

587   10  

10 ответов:

Если ваши поиски в этом поле всегда будут чувствительны к акценту, то объявите параметры сортировки поля как utf8_bin (который будет сравнивать для равенства байты в кодировке utf8) или используйте языковые параметры сортировки, которые различают акцентированные и не акцентированные символы.

col_name varchar(10) collate utf8_bin

Если поиск обычно не зависит от акцента, но вы хотите сделать исключение для этого поиска, попробуйте;

WHERE col_name = 'abád' collate utf8_bin

в моей версии (MySql 5.0) нет доступных параметров сортировки кодировки utf8 для поиска без учета регистра и акцента. Единственный чувствительный к акценту параметр сортировки для utf8-utf8_bin. Однако он также чувствителен к регистру.

моя работа заключалась в том, чтобы использовать что-то вроде этого:

SELECT * FROM `words` WHERE LOWER(column) = LOWER('aBád') COLLATE utf8_bin

ошибка MySQL, для дальнейшего использования, является http://bugs.mysql.com/bug.php?id=19567.

Я получал ту же ошибку.

Я изменил параметры сортировки таблицы utf8_bin (через phpMyAdmin) и проблема была решена.

надеюсь, что это помогает! :)

проверьте, не заканчивается ли тип сортировки таблицы базы данных на "_ci", это означает нечувствительность к регистру...

измените его на параметры сортировки то же самое или ближайшее имя без "_ci" ...

например... изменить "utf8_general_ci" на " utf8_bin" Mke

SELECT *  FROM `words` WHERE column = 'abád' collate latin1_General_CS 

(или ваши параметры сортировки, включая cs)

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

Ну, вы только что описали, что такое utf8_general_ci collation (a, á, à, â, ä, å все равно a в сравнении).

также были изменения в MySQL server 5.1 в отношении utf8_general_ci и utf8_unicode_ci, так что это зависит от версии сервера тоже. Лучше проверь документы.

Итак, если это MySQL server 5.0, я бы пошел на utf8_unicode_ci вместо utf8_general_ci, что явно неправильно для вашего варианта использования.

принятый ответ хорош, но будьте осторожны, что вам, возможно, придется использовать COLLATE utf8_bin вместо этого!

WHERE col_name = 'abád' collate utf8_bin

выше исправляет ошибки, такие как:

MySQL сказал: документация 1253-параметры сортировки 'utf8_bin' не действительны для Набор символов 'utf8'

это работает для меня для поиска без акцента и без учета регистра в MySql server 5.1 в базе данных в utf8_general_ci, где столбец является LONGBLOB.

select * from words where '%word%' LIKE column collate utf8_unicode_ci

С

select * from words where'%word%' LIKE column collate utf8_general_ci

результат чувствителен к регистру, но не к акценту.

Comments

    Ничего не найдено.