private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
(mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
COLLATE LOCALIZED ASC
代表什么?
答案 0 :(得分:30)
答案 1 :(得分:21)
它指示SQLite适当地对非ASCII字符进行排序。具有变音符号的字符(有些称为重音符号)具有比字符Z更高的字节代码,因此纯ASCII类型不适合许多外语。
例如,大写字母A char的字节代码为0x41
,大写字母Z char为0x5A
。然后我们得到Á(资本A accute),Unicode中的代码是0x00C1
。因此,一个普通的字节代码排序将导致Á在Z之后。
但是在具有这种特征的语言中,惯例是将具有变音符号的语言设置为好像没有变音符号。所以Á应该与平原A一起,至少在B之前。
为了说明,我们在下面列出了使用字节码排序的名称:
现在使用COLLATE LOCALIZED
它将按字符的“基数”排序:
答案 2 :(得分:12)
COLLATE是一个SQL运算符,允许您覆盖字符串的默认排序顺序。例如,“COLLATE NOCASE”执行不区分大小写的比较,“COLLATE BINARY”执行区分大小写的比较。
SQLite C界面允许您定义自定义归类(http://www.sqlite.org/c3ref/create_collation.html)。