2010-03-04 2 views
28
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 Подставка для?Что такое COLLATE LOCALIZED ASC?

ответ

30

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

+0

Должен ли я определить что-нибудь добавьте к моей схеме таблицы, чтобы иметь возможность ее использовать? Является ли этот конкретный SQLite конкретным или конкретным Android? Могу ли я сортировать эти все мои собственные столбцы? – Pentium10

+0

ASC означает восходящий. Он не должен иметь ничего общего с ASCII. –

12

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

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

19

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

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

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

И для иллюстрации, мы имеем под списком имен сортируется с помощью их байткод:

  • Бренду
  • Дебби
  • Джордж
  • Álvaro
  • Érico

Нет ш с помощью COLLATE LOCALIZED было бы сортировать по "базе" персонажа:

  • Álvaro
  • Бренда
  • Дебби
  • Érico
  • Джордж
+3

Это должно быть больше всего, с хорошим объяснением с примером. –

 Смежные вопросы

  • Нет связанных вопросов^_^