У меня есть схема в "utf8 - UTF-8 Unicode" как кодировка и сортировка "utf8_spanish_ci".
Все внутренние таблицы - это InnoDB с одинаковой кодировкой и сортировкой, как указано.
Здесь возникает проблема:
с запросом типа
SELECT *
FROM people p
WHERE p.NAME LIKE '%jose%';
Я получаю 83 строки результатов. У меня должно быть 84 результата, потому что я это знаю.
Изменение где для:
WHERE p.NAME LIKE '%JOSE%';
Я получаю точные 83 строки. С такими комбинациями, как JoSe, Jose, JOSe и т.д. Все те же 83 строки сообщаются.
Проблема возникает, когда акценты играют в игру. Если:
WHERE p.NAME LIKE '%josé%';
Я не получаю результатов. 0 строк.
Но если я это сделаю:
WHERE p.NAME LIKE '%JOSÉ%';
Я получаю только одну результирующую строку, поэтому 1 строка. Это единственная строка, в которой акцентируется "jose" и капитализируется.
Я пробовал с josÉ, или JoSÉ, или любую другую комбинацию, которую я делаю, если акцентированное письмо остается заглавным или нет, поскольку оно действительно хранится в базе данных, и оно все еще возвращает единственную строку. Если я вдруг изменил "É" для "é" в любой комбинации, которую я делаю с заглавной буквой в JOSE, он не возвращает строк.
Итак, выводы:
- Нечувствительность к регистру, если в игре не играют латинские символы.
- С учетом регистра, если появляются латинские символы.
- Акцент чувствителен, как будто я ищу JOSE или jose, я получаю только 83 строки вместо 84 строк, которые мне нужны.
Что я хочу?
- Для поиска "jose", "JOSE", "José", "JOSÉ", "JSE", "jöse", "JoSÈ",... должны вернуть 84 строки, которые я знаю, которые существуют. Я, что бы превратить мои поиски в регистр без учета регистра и "латинский" нечувствительный.
Решения, подобные COLLATION
на LIKE
, не работают для меня, не знаю, почему...
Что я могу сделать?
Спасибо заранее!
EDIT:
Если я делаю sometingh как:
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 строки сообщаются, как будто я ничего не сделал...