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 тоже.
Любые идеи? Спасибо заранее!
Ответы
Ответ 1
Возможность добавить столбец в таблицу, которая включает нормализованные заголовки, не является опцией, так как база данных извлекается с сервера и поддерживается третьей стороной.
Вы можете создать отдельную таблицу с нормализованным столбцом и внешним ключом в исходную таблицу. Я думаю, что это единственный вариант, который у вас есть с sqlite на Android.
Или, если бы вы могли каким-то образом создать пользовательскую функцию remove_diacritics
, вы бы выбрали так:
SELECT * FROM x WHERE remove_diacritics(lower(y))
LIKE remove_diacritics(lower(%cafe%))
Но будьте осторожны, индекс на x.y
не будет использоваться. Вам также может не понадобиться lower
. Но насколько я знаю, создание функций не так просто на sqlite, если даже возможно.