我使用的是 SQL Server 2008 R2。
我有一个从数据库检索的数据缓存,当前获取字符串的方法是通过map.get()
。但是,代码的某些部分直接从数据库查询,而不仅仅是使用缓存,因为这些情况需要一些联接。现在的问题是,表上的 collation
导致通过 SQL 比较(使用表排序规则)的文本比较和通过 Java 使用 map.get()
进行的文本比较之间存在不同的行为.
我已经阅读过有关 java.text.Collator
的内容,但它需要使用 collator.Compare
才能正确使用它。有没有办法强制 map 使用固定的Collator
。
顺便说一下,这种情况下的排序规则使用日语字符,在 SQL Server 中比较时,半角和全角日语是相同的。
最佳答案
您可以使用带有针对您的情况正确配置的 Collator 的 TreeMap。以下是大写和小写拉丁字符被视为等效的示例:
Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);
Map<String, String> map = new TreeMap<String, String>(collator);
map.put("ABC", "foo");
System.out.println(map.get("abc"));
关于java - map 可以使用 java.text.Collator 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6895344/