Подтвердить что ты не робот

Как проводить поиск Accent Sensitive в MySql

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

Абаде
АБАД

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

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

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

Абаде
АБАД

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

abád

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

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

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

4b9b3361

Ответ 1

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

col_name varchar(10) collate utf8_bin

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

WHERE col_name = 'abád' collate utf8_bin

Ответ 2

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

Надеюсь, это поможет!:)

Ответ 8

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

Измените его, чтобы сопоставить одно и то же или ближайшее имя без "_ci"...

Например... измените "utf8_general_ci" на "utf8_bin" МКЭ

Ответ 9

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

WHERE col_name = 'abád' collate utf8mb4_bin

Выше исправлены ошибки, например:

MySQL сказал: Документация 1253 - COLLATION 'utf8_bin' недействительна для CHARACTER SET 'utf8mb4'