Что означает COLLATE LOCALIZED ASC? - PullRequest
29 голосов
/ 04 марта 2010
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 ]

30 голосов
/ 04 марта 2010

Collate - это просто фантастика (ну, вроде). Так что это порядок сортировки на основе локализованных предпочтений (то есть алфавита и соглашений текущего языка) в asc конечный порядок.

21 голосов
/ 08 августа 2014

Указывает SQLite правильно сортировать не-ASCII-символы.Символы с диакритическими знаками (некоторые называют их акцентами) имеют более высокие байтовые коды, чем символ Z, поэтому обычная сортировка ASCII не подходит для многих иностранных языков.

Например, байт-код заглавного символа A равен 0x41 и заглавная буква Z - 0x5A.Тогда у нас есть Á (прописная буква A), код которой в Unicode равен 0x00C1.Таким образом, простая сортировка байт-кода приведет к тому, что Á будет после Z.

Но в языках, имеющих символы такого типа, принято ставить символы с диакритическими знаками так, как если бы они не имели диакритического знака.Таким образом, символ Á должен быть вместе с простой буквой A, по крайней мере, до B.

. И чтобы проиллюстрировать это, ниже приведен список имен, отсортированных по байт-коду:

  • Бренда
  • Дебби
  • Джордж
  • Альваро
  • Эрико

Теперь, используя COLLATE LOCALIZED, он будет сортировать по "базе"персонаж:

  • Альваро
  • Бренда
  • Дебби
  • Эрико
  • Джордж
12 голосов
/ 06 марта 2010

COLLATE - это оператор SQL, который позволяет переопределить порядок сортировки по умолчанию для строк. Например, «COLLATE NOCASE» выполняет сравнение без учета регистра, а «COLLATE BINARY» выполняет сравнение с учетом регистра.

Интерфейс SQLite C позволяет определять пользовательские параметры сортировки (http://www.sqlite.org/c3ref/create_collation.html).

...