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

Android, диакритический нечувствительный поиск SQLite

Я пытаюсь запросить базу данных SQLite в андроиде, где французские символы с акцентами должны обрабатываться как обычные латинские символы, например:

SELECT * FROM x WHERE y LIKE %cafe%

должен возвращать

café, câfè, ...

У меня уже целый день googled и читал все о сообщениях в stackoverflow. Возможность добавить столбец в таблицу, которая включает нормализованные заголовки, не является опцией, так как база данных извлекается с сервера и поддерживается третьей стороной.

Использование сопоставлений, упоминаемых в других сообщениях, таких как

Latin1_general_CI_AI

также нет опции, потому что SQLite поддерживает только 3 (в android 5), которые мне не помогают.

Установка базы данных в android на

Locale.FRENCH

и используя сопоставление

COLLATE LOCALIZED

также не выполняет трюк.

Я знаю, что есть некоторый флаг в iOS (DiacriticInsensitiveSearch), который делает это автоматически, и поэтому я надеюсь, что что-то вроде этого доступно для android тоже.

Любые идеи? Спасибо заранее!

4b9b3361

Ответ 1

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

Вы можете создать отдельную таблицу с нормализованным столбцом и внешним ключом в исходную таблицу. Я думаю, что это единственный вариант, который у вас есть с sqlite на Android.

Или, если бы вы могли каким-то образом создать пользовательскую функцию remove_diacritics, вы бы выбрали так:

SELECT * FROM x WHERE remove_diacritics(lower(y)) 
LIKE remove_diacritics(lower(%cafe%))

Но будьте осторожны, индекс на x.y не будет использоваться. Вам также может не понадобиться lower. Но насколько я знаю, создание функций не так просто на sqlite, если даже возможно.