Как провести поиск с учетом акцента в MySql
у меня есть таблица MySQL с utf8 общие параметры сортировки ci. В таблице, я вижу две записи:
Абадской
апартаменты Abacus
Я использую запрос, который выглядит так:
SELECT * FROM `words` WHERE `word` = 'abád'
результат запроса дает оба слова:
Абадской
апартаменты Abacus
есть ли способ указать, что я только хочу, чтобы MySQL нашел слово с ударением? Я хочу, чтобы запрос возвращал только
апартаменты Abacus
Я тоже пробовал это запрос:
SELECT * FROM `words` WHERE BINARY `word` = 'abád'
это не дает мне никаких результатов. Спасибо за помощь.
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