我正在使用SQL Server2008 R2。
我有一个从数据库检索的数据缓存,目前获取字符串的方法是通过map.get()。然而,代码的某些部分直接从数据库查询,而不是仅仅使用缓存,因为这些情况需要一些连接。现在的问题是,表上的collation在通过SQL比较(使用表排序规则)进行文本比较和通过Java使用map.get()进行文本比较之间造成了不同的行为。
我读过关于java.text.Collator的文章,但它需要使用collator.Compare才能正确使用它。有没有办法强制地图使用固定的Collator。
顺便说一句,这种情况下的排序规则是使用日语字符,而在SQL Server中,半角日语和全角日语是相同的。
发布于 2011-08-01 15:55:17
您可以使用具有为您的案例正确配置的排序器的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"));发布于 2011-08-01 15:55:37
您可以使用Japanese Locale启动Collator,如下所示:
Collator collator = Collator.getInstance( Locale.JAPANESE );然后,您可以像这样比较字符串:
int comparison = collator.compare( strOne, strTwo );https://stackoverflow.com/questions/6895344
复制相似问题