Как игнорировать акцент в запросе SQLite (Android)

Я новичок в adnroid, и я работаю над запросом в sqlite, но проблема в том, что я использую акцент в своей строке. Пример:

  • aaÃ
  • aaÃ
  • aaÃ
  • aaÃ
  • ааа
  • AAA

Если я сделаю:

SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%a%' ORDER BY MOVIE_NAME; 

Это возrotation:

  • AAA
  • aaa (Он игнорирует остальные)

Но если я это сделаю:

 SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%à%' ORDER BY MOVIE_NAME; 

Это возrotation:

  • ààà (игнорируя заголовок «ÀÀÀ»)

Я хочу выбрать строки в SQLite DB, не заботясь о акцентах и ​​случае. Пожалуйста помоги.

Как правило, сравнение строк в SQL контролируется правилами COLLATE столбцах или выражениях. В Android предварительно определены три последовательности сортировки: BINARY (по умолчанию), LOCALIZED и UNICODE. Ни один из них не идеален для вашего случая использования, и API C для установки новых функций сортировки, к сожалению, не отображается в Java API.

Чтобы обойти это:

  1. Добавьте еще один столбец в таблицу, например MOVIE_NAME_ASCII
  2. Сохраните значения в этом столбце с удалением отметок. Вы можете удалять акценты, нормализуя свои строки в Unicode Normal Form D (NFD) и удаляя не кодовые точки ASCII, так как NFD представляет акцентированные символы примерно как ASCII + сочетание маркеров акцента:

     String asciiName = Normalizer.normalize(unicodeName, Normalizer.Form.NFD) .replaceAll("[^\\p{ASCII}]", ""); 
  3. Выполняйте поиск текста в этом столбце с нормализацией ASCII, но отображает данные из исходного столбца юникода.

Вы можете использовать Android NDK для перекомпиляции источника SQLite, включая желаемый ICU (International Components for Unicode). Разъясняется на русском языке: http://habrahabr.ru/post/122408/

Процесс компиляции SQLilte с источником с ICU объясняется здесь:

Как скомпилировать sqlite с ICU?

К сожалению, у вас будут разные APK для разных процессоров.

Вам нужно посмотреть на них, а не на акцентированные персонажи, а на совершенно разные персонажи. Вы могли бы также искать a, b или c. При этом я бы попытался использовать для этого регулярное выражение. Это будет выглядеть примерно так:

 SELECT * from TB_MOVIE WHERE MOVIE_NAME REGEXP '.*[aAàÀ].*' ORDER BY MOVIE_NAME; 
  • Создать таблицу в SQLite только в том случае, если она уже не существует
  • Функция SQLiteDatabase close () вызывает NullPointerException при использовании нескольких streamов
  • Как использовать существующую базу данных с Android-приложением
  • Что такое хорошая OO C ++-shell для sqlite
  • База данных Android SQLite, таблица падения WHY и воссоздание при обновлении
  • Легкая альтернатива Hibernate?
  • Android-курсор с ORMLite для использования в CursorAdapter
  • Поддерживает ли Android поддержку JDBC
  • существует ли ограничение на размер базы данных SQLite?
  • Android Удалить запрос
  • Нечувствительный к регистру и нечувствительный, как в SQLite
  • Interesting Posts

    Поставщик формата размера файла

    Простой запрос Linq дублировал соединение с той же таблицей?

    Удалите Internet Explorer 8 и установите Internet Explorer 6

    Символические ссылки при форматировании

    Может ли кто-нибудь объяснить мне, как процессор находит источник прерывания в теории ОС?

    Установщик Ubuntu 14.04 не показывает существующие разделы

    Геометрическое среднее: есть ли встроенный?

    На панели инструментов нет тени по умолчанию?

    Как остановить и обнаружить вилку

    Почему мое правило Outlook 2007 не может быть серверным при использовании правила «Отметить как прочитанное»

    Зачем вам когда-либо хотеть выделять память на кучу, а не на стек?

    Как установить псевдоним в командной строке Windows?

    Когда можно использовать глобальную переменную в C?

    Расположение журналов сервера GlassFish

    В чем разница между инкапсулированием частного члена как свойства и определением свойства без частного члена?

    Давайте будем гением компьютера.