type lite android database sqlite collation

android - type - sqlite3 datetime



Android, Diacritic Insensible SQLite Search (1)

Estoy tratando de consultar una base de datos SQLite en Android donde los caracteres franceses con acentos deben manejarse como los caracteres latinos normales, por ejemplo:

SELECT * FROM x WHERE y LIKE %cafe%

debería regresar

café, câfè, ...

He buscado en Google durante todo un día y leí todas las publicaciones relacionadas con stackoverflow. La posibilidad de agregar una columna a la tabla que incluye títulos normalizados no es una opción, ya que la base de datos se obtiene de un servidor y es mantenida por un tercero.

Usando colaciones mencionadas en otras publicaciones como

Latin1_general_CI_AI

tampoco es una opción, porque SQLite solo admite 3 (en Android 5) intercalaciones que no me ayudan.

Configuración de la base de datos en Android para

Locale.FRENCH

y usando colación

COLLATE LOCALIZED

Tampoco hace el truco.

Sé que hay una bandera en iOS (DiacriticInsensitiveSearch) que lo hace automáticamente y, por lo tanto, espero que algo como esto también esté disponible para Android.

¿Algunas ideas? ¡Gracias por adelantado!


La posibilidad de agregar una columna a la tabla que incluye títulos normalizados no es una opción, ya que la base de datos se obtiene de un servidor y es mantenida por un tercero.

Puede crear una tabla separada con una columna normalizada y una clave externa para la tabla original. Creo que esta es la única opción que tienes con sqlite en Android.

O si pudiera crear de alguna manera la función remove_diacritics definida por el remove_diacritics , entonces seleccionaría así:

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

Pero cuidado, un índice en xy no se usará. También puede que no necesites lower . Pero por lo que sé, crear funciones no es tan fácil en sqlite, si es posible.