30
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の略ですか?

4

3 に答える 3

30

Collat​​eは、ソートのために空想的に話すだけです(まあソート)。したがって、これは、ローカライズされた設定(つまり、現在の言語のアルファベットと規則)に基づく昇順の並べ替え順序です。

于 2010-03-04T16:07:17.257 に答える
22

非ASCII文字を適切にソートするようにSQLiteに指示します。発音区別符号(アクセントと呼ばれることもあります)を含む文字は、文字Zよりもバイトコードが高いため、単純なASCIIソートは多くの外国語に適合しません。

たとえば、大文字のA文字のバイトコードは0x41であり、大文字のZ文字のバイトコードはです0x5A。次に、UnicodeのコードがであるÁ(大文字のA accute)があります0x00C1。したがって、単純なバイトコードソートでは、ÁがZの後になります。

しかし、この種の文字を含む言語では、発音区別符号を持たない言語を発音区別符号を持たないかのように配置するのが慣例です。したがって、少なくともBの前に、ÁはプレーンAと一緒になっている必要があります。

説明のために、バイトコードを使用してソートされた名前のリストを以下に示します。

  • ブレンダ
  • デビー
  • ジョージ
  • アルバロ
  • エリコ

これを使用するCOLLATE LOCALIZEDと、文字の「ベース」で並べ替えられます。

  • アルバロ
  • ブレンダ
  • デビー
  • エリコ
  • ジョージ
于 2014-08-07T23:13:55.527 に答える
12

COLLATEは、文字列のデフォルトのソート順を上書きできるSQL演算子です。たとえば、「COLLATE NOCASE」は大文字と小文字を区別しない比較を行い、「COLLATEBINARY」は大文字と小文字を区別する比較を行います。

SQLite Cインターフェースを使用すると、カスタム照合を定義できます(http://www.sqlite.org/c3ref/create_collat​​ion.html)。

于 2010-03-06T04:44:50.077 に答える