具有与 MySQL utf8_general_ci 归类相似特性的 Java Collat​​or

标签 java mysql utf-8 collation

有没有和MySQL的utf8_general_ci一样的Collat​​or实现?我需要一个不区分大小写且不区分德语元音变音符号如 ä 和元音 a 的整理器。

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

最佳答案

您可以使用以下整理器:

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

关于具有与 MySQL utf8_general_ci 归类相似特性的 Java Collat​​or,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151582/

相关文章:

java - 使用 Matrix android java 进行视频裁剪

mysql - 在 MySQL 中存储表情符号

mysql - 通过分组 Eloquent 地找到具有最大值的行

MySQL,将 Latin1 迁移到 UTF8 后,LIKE 搜索不再起作用。尝试了所有 UTF8 排序规则

mysql - Golang mysql 客户端 DB.Query 方法不重新编码 utf-8 编码的字符

java - 如何将 Waze 流量​​数据集成到网站中?

java - 错误 java.lang.IllegalArgumentException : Invalid token character '/' in token "multipart/form-data"

java - 为什么 resolve dependencies 'classpath' 这么慢?

php - 尝试使用 mysql 中的数组在 PHP 中以某种方式格式化 json

ruby-on-rails - 我可以在 Ruby 1.9 上设置默认字符串编码吗?