Я не нашел никакого простого способа. Я создал дополнительные столбцы таблицы сортировки, которые содержат нормализованные данные (отмечено here). Создан постоянным для нормированного столбцов таблицы имени префикса:
public static final String ASCII_PREFIX = "ascii_";
создал таблицу (для текстового столбца создать еще один столбец с префиксом):
String sql = "CREATE TABLE IF NOT EXISTS " + tableName + " (";
for(columnModel column: table.columns) {
if(column.position > 0){ sql += ", "; }
sql += column.dbName + " " + column.dbType;
}
for(columnModel column: table.columns) {
if(column.dbType.equals("TEXT")) {
sql += ", " + ASCII_PREFIX + column.dbName + " " + column.dbType;
}
}
sql += ")";
db.execSQL(sql);
начинку измененных данные таблиц (добавить нормированные данные для специальной колонки):
//...cycle for data filling...
ContentValues values = new ContentValues();
for(columnModel column: table.columns) {
values.put(column.dbName, valueStr);
if(column.dbType.equals("TEXT")){
values.put(ASCII_PREFIX + column.dbName, normalize(valueStr));
}
}
db.insert(tableName, null, values);
, а затем я сортирую в качестве альтернативы для текстовых колонок:
//... in method for sorting...
String orderBy;
....
if(column.dbType.equals("TEXT")) {
orderBy = ASCII_PREFIX + column.dbName;
}else {
orderBy = column.dbName;
}