0

我对 Android 很陌生,最近我遇到了这样的问题:

我使用 Android 联系人数据库,特别是数据表。我在那儿放了一些新的 mimetype 信息,并试图在搜索过程中寻找这些信息。问题是,我使用的是 SQLite LIKE 运算符,它对非拉丁字符区分大小写。另一个问题是我无法以任何方式更改数据库,因为它是 android 内置数据库。

Builder builder = Data.CONTENT_URI.buildUpon();

loader.setSelection(getIndividualsSelection());
query = query.trim();
if( (null != query) && !query.equals("")){

    loader.setSelection(Data.MIMETYPE + "='" + 
        MY_MIMETYPE + "' " +   " AND  ( " + 
        MY_DATA_COLUMN + 
        " LIKE '"+ query + "%' " +
        specialCharsEscape + "  COLLATE NOCASE)");
    loader.setSelectionArgs(null);        
    loader.setUri(builder.build()); 
    loader.setProjection(MY_PROJECTION);
    loader.setSortOrder(MY_SORT_ORDER);

}

这都在 LoaderCallbacks 的 onCreateLoader 函数内部,其中 loader 是 CursorLoader 类型的。你知道如何强制我的 SQLite 不区分大小写吗?

我已经尝试过使用 SQLite 函数 UCASE 和 LCASE 但它不起作用。使用正则表达式会导致该数据库出现异常以及使用 MATCH... 将不胜感激。

4

1 回答 1

0

Android 有本地化排序规则

要真正能够使用排序规则进行比较,请使用BETWEEN而不是LIKE; 例如:

MyDataColumn BETWEEN 'mąka' COLLATE UNICODE AND 'mąka' COLLATE UNICODE

是最后一个 UTF-8 编码的 Unicode 字符;Java 字符串可能会使用代理对其进行编码为"\uDBFF\uDFFF".

请注意,UNICODE某些 Android 版本中的排序规则已损坏。

于 2013-08-20T17:20:21.177 回答