Java排序与MySQL排序不同
我需要检查表中的排序,表内容由MySQL提供。我使用以下行对列表进行排序:Java排序与MySQL排序不同,java,mysql,sorting,collections,comparator,Java,Mysql,Sorting,Collections,Comparator,我需要检查表中的排序,表内容由MySQL提供。我使用以下行对列表进行排序: Collections.sort(已排序,字符串。不区分大小写\u顺序) 并得到以下结果: tes3@test.com test4@test.com test5@test.com test@test.com 测试_user@mail.com 用户-og@driver.com 这是我通过查询从MySQL获得的: 从“用户”中选择“电子邮件”,其中1个订单由“用户”订购。“电子邮件”ASC: tes3@test.com 测试
Collections.sort(已排序,字符串。不区分大小写\u顺序)代码>
并得到以下结果:
tes3@test.com
test4@test.com
test5@test.com
test@test.com
测试_user@mail.com
用户-og@driver.com
这是我通过查询从MySQL获得的:
从“用户”中选择“电子邮件”,其中1个订单由“用户”订购。“电子邮件”ASC
:
tes3@test.com
测试_user@mail.com
test@test.com
test4@test.com
test5@test.com
用户-og@driver.com
正如你所看到的,顺序是不一样的。
Java似乎是根据ASCII表排序的:
4(52)-(64)-(95)
但在MySQL结果中,顺序是\u->@->4
电子邮件
字段排序规则为:utf8\u unicode\u ci
问题是什么?是否有比较器以相同的方式进行排序 使用[Collator][1]
:
Collator类执行区分区域设置的字符串比较。您可以使用这个类为自然语言文本构建搜索和排序例程
代码为:
Collator coll = Collator.getInstance(Locale.US);
coll.setStrength(Collator.IDENTICAL);
Collections.sort(words, coll);
AFAIK java处理的\uuu
不同,因此在排序时,它们在sql中处理。但造成这种情况的原因可能是您的本地语言设置。您在代码中是如何做到的?可能是重复的谢谢,这有助于使用数字和“@”等符号,但现在我在空格
识别方面遇到了问题。MySQL输出:现有测试公司
测试公司
测试公司10
测试公司
测试公司
使用Collator的Java排序结果:现有测试公司
测试公司
测试公司
通过添加规则解决:字符串rules=((RuleBasedCalator)Collator.getInstance(Locale.US)).getRules();RuleBasedCalator correctedCollator=新的RuleBasedCalator(rules.replaceAll(“