Cómo ignorar el acento en la consulta de SQLite (Android)

Soy nuevo en adnroid y estoy trabajando en una consulta en sqlite, pero el problema es cuando uso acento en mi cadena. Ex:

  • ÁÁÁ
  • ááá
  • ÀÀÀ
  • ààà
  • aaa
  • AAA

Si lo hago:

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

Es regreso:

  • AAA
  • aaa (está ignorando a los demás)

Pero si lo hago:

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

Es regreso:

  • ààà (ignorando el título “ÀÀÀ”)

Quiero seleccionar cadenas en una base de datos SQLite sin tener en cuenta los acentos y el caso. Por favor ayuda.

En general, las comparaciones de cadenas en SQL se controlan mediante columnas o reglas de expresión COLLATE . En Android, solo tres secuencias de intercalación están predefinidas : BINARIO (predeterminado), LOCALIZADO y UNICODE. Ninguno de ellos es ideal para su caso de uso, y la API de C para instalar nuevas funciones de intercalación desafortunadamente no está expuesta en la API de Java.

Para solucionar esto:

  1. Agregue otra columna a su tabla, por ejemplo, MOVIE_NAME_ASCII
  2. Almacene los valores en esta columna con los acentos eliminados. Puede eliminar acentos normalizando sus cadenas en Unicode Normal Form D (NFD) y eliminando puntos de código que no sean ASCII ya que NFD representa caracteres acentuados más o menos como ASCII + combinando marcadores de acento:

     String asciiName = Normalizer.normalize(unicodeName, Normalizer.Form.NFD) .replaceAll("[^\\p{ASCII}]", ""); 
  3. Haga sus búsquedas de texto en esta columna ASCII normalizada pero muestre datos de la columna original Unicode.

Puede usar Android NDK para recomstackr la fuente de SQLite, incluida la ICU deseada (Componentes internacionales para Unicode). Explicado en ruso aquí: http://habrahabr.ru/post/122408/

El proceso de comstackción del SQLilte con la fuente con ICU se explica aquí:

¿Cómo comstackr sqlite con ICU?

Desafortunadamente terminarás con diferentes APK para diferentes CPU.

Debes mirar estos, no como personajes acentuados, sino como personajes completamente diferentes. También podría estar buscando a, b, o c. Dicho esto, trataría de usar una expresión regular para ello. Se vería algo así como:

 SELECT * from TB_MOVIE WHERE MOVIE_NAME REGEXP '.*[aAàÀ].*' ORDER BY MOVIE_NAME;