Java Collat​​or具有与MySQLs utf8_general_ci校对类似的特性

时间:2016-03-22 10:15:16

标签: java mysql utf-8 collation

是否有任何Collator实现具有与MySQL的utf8_general_ci相同的特性?我需要一个不区分大小写的collat​​or,并且不会将ä等德语元音变化与元音a区分开来。

背景: 我们最近遇到了一个错误,该错误是由我们表中的错误排序错误引起的。使用的排序规则是utf8_general_ci,其中utf8_bin是正确的排序规则。特定列具有唯一索引。 utf8_general_ci排序规则不区分pökerpoker之类的字词,因此合并了行,这是不可取的。 我现在需要一种方法来为我们的Java应用程序实现一个模块,该模块可以修复错误的行。

1 个答案:

答案 0 :(得分:2)

您可以使用以下整理器:

Collator collator = Collator.getInstance();
collator.setStrength(Collator.PRIMARY);

具有这种优势的整理者只会在比较期间考虑显着的主要差异。

考虑一个例子:

System.out.println(compare("abc", "ÀBC", Collator.PRIMARY)); //base char
System.out.println(compare("abc", "ÀBC", Collator.SECONDARY)); //base char + accent
System.out.println(compare("abc", "ÀBC", Collator.TERTIARY)); //base char + accent + case
System.out.println(compare("abc", "ÀBC", Collator.IDENTICAL)); //base char + accent + case + bits

private static int compare(String first, String second, int strength) {
   Collator collator = Collator.getInstance();
   collator.setStrength(strength);
   return collator.compare(first, second);
}

输出结果为:

0
-1
-1
-1

请查看这些链接以获取更多信息:

http://www.javapractices.com/topic/TopicAction.do?Id=207 https://docs.oracle.com/javase/7/docs/api/java/text/Collator.html#PRIMARY