Java sorting is not the same with MySQL sorting

孤街醉人 提交于 2019-12-01 22:47:38

问题


I need to check the sorting in the table and table content is given by MySQL. I'm using the following row to sort the list:
Collections.sort(sorted, String.CASE_INSENSITIVE_ORDER);

And get the following result:
tes3@test.com
test4@test.com
test5@test.com
test@test.com
test_user@mail.com
user-og@driver.com

And this is what I get from MySQL by query:
SELECT 'email' FROM 'user' WHERE 1 ORDER BY 'user'.'email' ASC :

tes3@test.com
test_user@mail.com
test@test.com
test4@test.com
test5@test.com
user-og@driver.com

As you can see, the order is not the same. Seems that Java sorts according to ASCII table: http://www.asciitable.com/ 4 (52) - @ (64) - _ (95)

But in MySQL result the order is _ -> @ -> 4

The email field collation is: utf8_unicode_ci
What is the problem and is there any comparator to make ordering in the same way?


回答1:


Use [Collator][1]:

The Collator class performs locale-sensitive String comparison. You use this class to build searching and sorting routines for natural language text.

And code will be:

    Collator coll = Collator.getInstance(Locale.US);
    coll.setStrength(Collator.IDENTICAL); 
    Collections.sort(words, coll);


来源:https://stackoverflow.com/questions/33999947/java-sorting-is-not-the-same-with-mysql-sorting

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!