我有一个sqlite数据库,我需要按一个列来排序,这个列有一些以重音字符开头的单词。这些物品订购错误,它们出现在结果的末尾:
安东尼奥 BONZO Zeto 安吉拉
当sqlite数据库在该列中有重音时,如何正确订购?
感谢
答案 0 :(得分:20)
无论
... 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
答案 1 :(得分:1)
要支持数据库中的重音字符,您可以使用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
可以使用重音字符正常工作。