Android-Android各种不同平台下,用distinct查询数据库得到的结果的顺序不同
用模拟器测试的
数据库内容结构如下图所示
在平台2.2和3.1下查询的结果是:公司 民生 聚焦 要闻 评论 金融
在平台4.4下查询的结果是 要闻 公司 金融 聚焦 民生 评论
我想要实现的是4.4平台下的顺序结果,为什么会出现这种不同的差异?告诉一下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
没有重现你的实现, 仅简单分析一下.
"在平台2.2和3.1下查询的结果是:公司 民生 聚焦 要闻 评论 金融"
-- 这个结果和ICU的排序是一样的, 看这里:
http://demo.icu-project.org/icu-bin/locexp?_=zh_Hans&d_=zh&x=col
在source栏输入:
"
要闻
公司
金融
聚焦
民生
评论
"
点sort, 排序为:
公司 民生 聚焦 要闻 评论 金融
在这里, 试一下不同的Collator:
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
这可能和自然排序的结果不同,
计算机中的每一个字符都有一个内码。在默认情况下,计算机排序时,比较两个字符的大小就是比较字符内码的大小,这对于英文来说没有问题,因为英文字母的内码是按字母顺序递增的。对于中文来说,就比较麻烦了:首先,中文的排序方式有多种,比如按内码排序、按拼音排序和按笔画排序,要通过参数指定排序的方式,否则计算机就按内码排序了。其次,汉字的内码顺序即不同于拼音顺序,也不同于按笔画顺序。在GB2312编码中,汉字基本上按拼音排序(据说有例外,不太清楚)。在GBK中,它在GB2312基础上进行了扩充,兼容GB2312中的所有字符,所以不是按拼音排序了。在 Unicode中,汉字的排列似乎更没有什么规律可言了。
希望该答案可以给你启示,另外不建议直接查询 汉字 排序,可以采用另用一字段排序序列,或者拼音排序。
跟android平台肯定没关系,有也是sqlite的不同,加上个自己的order就行了,就像楼上说的