У меня есть схема в "utf8 -- UTF-8 Unicode" в качестве набора символов и сопоставление "utf8_spanish_ci".
Все внутренние таблицы представляют собой InnoDB с такой же кодировкой и сопоставлением, как указано.
А вот и проблема:
с таким запросом, как
SELECT *
FROM people p
WHERE p.NAME LIKE '%jose%';
, я получаю 83 строки результатов. У меня должно быть 84 результата, потому что я это знаю.
Изменение where для:
WHERE p.NAME LIKE '%JOSE%';
Я получаю точно такие же 83 строки. С такими комбинациями, как JoSe, Jose, JOSe и т. д. сообщается все те же 83 строки.
Проблема возникает, когда в игре играют акценты.Если сделать:
WHERE p.NAME LIKE '%josé%';
Я не получаю результатов. 0 строк.
Но если я это сделаю:
WHERE p.NAME LIKE '%JOSÉ%';
Я получу только одну результирующую строку, то есть 1 строку. Это единственная строка, в которой "хосе" выделено ударением и написано с заглавной буквы.
Я пробовал с josÉ, или JoSÉ, или любой другой комбинацией, пока акцентированная буква остается заглавной или нет, поскольку она действительно хранится в базе данных и по-прежнему возвращает единственную строку. Если я внезапно заменю «É» на «é» в любой комбинации, которую я делаю с заглавными буквами в JOSE, он не возвращает строк.
Итак, выводы:
Чего я хочу?
Такие решения, как COLLATION
на LIKE
, у меня не работают, не знаю почему...
Что мне делать?
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Если я делаю что-то вроде:
WHERE p.NAME LIKE '%jose%' COLLATE utf8_general_ci;
я получаю сообщение об ошибке:
COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
И я также изменил все возможные сопоставления для столбцов!
И если я сделаю что-то вроде:
WHERE p.NAME LIKE _utf8 '%jose%' COLLATE utf8_general_ci;
Сообщается о тех же 83 строках, как будто я ничего не сделал...