COLLATE LOCALIZED ASC代表什么?

时间:2010-03-04 16:01:28

标签: java android sqlite contactscontract

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代表什么?

3 个答案:

答案 0 :(得分:30)

Collat​​e只是花哨的说法(好吧)。所以这是基于 asc 结束顺序的本地化偏好(即当前语言的字母和惯例)的排序。

答案 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)。