【发布时间】:2016-01-22 21:17:36
【问题描述】:
我有一个返回人名列表的查询,我按姓氏排序。
姓氏以Ã开头的人一直列在姓氏以Z开头的人之后
问题1:Ã应该在A之后,还是A的一部分,还是应该在Z之后
问题 2:如果它是 A 的一部分,我如何使用 Query order by 来控制它?
【问题讨论】:
标签: android string sqlite sql-order-by
我有一个返回人名列表的查询,我按姓氏排序。
姓氏以Ã开头的人一直列在姓氏以Z开头的人之后
问题1:Ã应该在A之后,还是A的一部分,还是应该在Z之后
问题 2:如果它是 A 的一部分,我如何使用 Query order by 来控制它?
【问题讨论】:
标签: android string sqlite sql-order-by
这取决于您的专栏的collation。 sqlite C API 允许您使用sqlite3_create_collation() 定义自己的排序规则,但这似乎不会通过 Android 的 Java 端 API 公开。
但是,SQLiteDatabase class documentation 提到 Android 会自动添加一些额外的排序规则。其中之一是LOCALIZED。这可能给你一个排序,其中 A 和 Ã 被认为是相同的(或至少是相邻的)——但是,结果会因用户选择的语言环境而异,所以如果你需要排序可能会很不方便对所有用户都一样。
【讨论】:
由于 Android 框架基于 Java 编程语言,字符默认使用 UTF-8 编码。
如果您查看任何unicode character table,您会注意到 Ã 是该列表中的数字 00C3,Z 是 005A (00C3 > 005A / Ã > Z)。
所以为了问你的问题1:Ã应该在Z之后
【讨论】: