java android sqlite contactscontract

java - ¿Qué significa COLLATE LOCALIZED ASC?



android sqlite (3)

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); }

¿Qué significa COLLATE LOCALIZED ASC ?


COLLATE es un operador de SQL que le permite anular el orden de clasificación predeterminado para las cadenas. Por ejemplo, "COLLATE NOCASE" hace una comparación insensible a mayúsculas y "COLLATE BINARY" hace una comparación sensible a mayúsculas y minúsculas.

La interfaz SQLite C le permite definir intercalaciones personalizadas ( http://www.sqlite.org/c3ref/create_collation.html ).


Enseña a SQLite a ordenar los caracteres que no sean ASCII de manera apropiada. Los caracteres con signos diacríticos (algunos los llaman acentos) tienen códigos de bytes más altos que el carácter Z, por lo que un tipo ASCII simple no se ajustaría a muchos idiomas extranjeros.

Por ejemplo, el código de bytes de la capital A es 0x41 y la capital Z char es 0x5A . Luego tenemos el Á (capital A accute) cuyo código en Unicode es 0x00C1 . Entonces, un ordenamiento de código de byte simple resultaría que Á debe estar después de Z.

Pero en los idiomas que tienen este tipo de personajes, la convención es poner a aquellos con signos diacríticos como si no tuvieran el diacrítico. Entonces el Á debe estar junto con el plano A, al menos antes de B.

Y para ilustrar, tenemos debajo una lista de nombres ordenados usando su bytecode:

  • Brenda
  • Debby
  • Jorge
  • Álvaro
  • Érico

Ahora usando COLLATE LOCALIZED ordenaría por la "base" del personaje:

  • Álvaro
  • Brenda
  • Debby
  • Érico
  • Jorge

Intercalar es simplemente hablar por tipo (bueno, tipo de). Por lo tanto, este es un ordenamiento de clasificación basado en preferencias localizadas (es decir, el alfabeto y las convenciones del idioma actual) en orden ascendente asc .