COLLATE LOCALIZED ASC代表什么?

Pen*_*m10 29 java sqlite android 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);
    }
Run Code Online (Sandbox Code Playgroud)

什么COLLATE LOCALIZED ASC代表什么?

Kri*_*ris 30

Collat​​e只是想要排序(很好).所以这是基于asc结束顺序的本地化偏好(即当前语言的字母和惯例)的排序.


eri*_*ric 21

它指示SQLite适当地对非ASCII字符进行排序.具有变音符号的字符(有些称为重音符号)具有比字符Z更高的字节代码,因此纯ASCII类型不适合许多外语.

例如,大写A char的字节代码是0x41,而大写字母Z char是0x5A.然后我们有Á(资本A accute),其中Unicode代码0x00C1.因此,一个普通的字节代码排序将导致Á在Z之后.

但是在具有这种特征的语言中,惯例是将具有变音符号的语言放在那些就像没有变音符号那样.所以Á应该与平原A一起,至少在B之前.

为了说明,我们在下面列出了使用字节码排序的名称:

  • 布伦达
  • 黛比
  • 乔治
  • 阿尔瓦罗
  • 艾力

现在使用COLLATE LOCALIZED它将按字符的"基础"排序:

  • 阿尔瓦罗
  • 布伦达
  • 黛比
  • 艾力
  • 乔治

  • 这应该是最受欢迎的,很好的解释与示例. (3认同)

dan*_*n04 12

COLLATE是一个SQL运算符,允许您覆盖字符串的默认排序顺序.例如,"COLLATE NOCASE"执行不区分大小写的比较,"COLLATE BINARY"执行区分大小写的比较.

SQLite C接口允许您定义自定义归类(http://www.sqlite.org/c3ref/create_collat​​ion.html).