我有一个 sqlite 数据库,我需要按一个包含一些以重音字符开头的单词的列进行排序。这些项目的排序错误,它们出现在结果的末尾:
安东尼奥·邦佐·泽托·安吉拉
当 sqlite 数据库在该列中有重音符号时,如何正确排序?
谢谢
任何一个
... ORDER BY column COLLATE UNICODE
或者
... ORDER BY column COLLATE LOCALIZED
除了 SQLite 的默认排序器之外
BINARY
,Android 还提供了两个LOCALIZED
,它们随系统的当前语言环境而变化,以及UNICODE
Unicode 排序算法,不针对当前语言环境量身定制。
例子:
db.execSQL("CREATE TABLE foo(a TEXT);");
db.execSQL("INSERT INTO foo VALUES('Antonio'),('Bonzo'),('Zeto'),('Ángela');");
Cursor c = db.rawQuery("SELECT * FROM foo ORDER BY a COLLATE UNICODE", null);
while (c.moveToNext()) {
Log.d("foo", c.getString(0));
}
输出:
Ángela
Antonio
Bonzo
Zeto
要在数据库中支持重音字符,您可以使用Normalizer
该类正确存储文本:
import java.text.Normalizer;
...
// Code to store the normalized data
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, Normalizer.normalize(name, Normalizer.Form.NFD));
...
// Code to read the normalized data
int indexName = cursor.getColumnIndex(COLUMN_NAME)
String name = Normalizer.normalize(cursor.getString(indexName), Normalizer.Form.NFC));
以这种方式存储数据,SQLite 语句ASC
和DESC
重音字符可以正常工作。