java - map 可以使用 java.text.Collat​​or 吗?

标签 java sql sql-server-2008 collation

我使用的是 SQL Server 2008 R2。

我有一个从数据库检索的数据缓存,当前获取字符串的方法是通过map.get()。但是,代码的某些部分直接从数据库查询,而不仅仅是使用缓存,因为这些情况需要一些联接。现在的问题是,表上的 collat​​ion 导致通过 SQL 比较(使用表排序规则)的文本比较和通过 Java 使用 map.get() 进行的文本比较之间存在不同的行为.

我已经阅读过有关 java.text.Collat​​or 的内容,但它需要使用 collat​​or.Compare 才能正确使用它。有没有办法强制 map 使用固定的Collat​​or

顺便说一下,这种情况下的排序规则使用日语字符,在 SQL Server 中比较时,半角和全角日语是相同的。

最佳答案

您可以使用带有针对您的情况正确配置的 Collat​​or 的 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.Collat​​or 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6895344/

相关文章:

java - 如何将图像从存储链接到实时数据库(Firebase)

java gui swing 操作用户输入

php - MySQL:如何获取带行的序号?

MySQL - 我应该如何索引这个表?

sql - 在 PostgreSQL 中查找下一个最接近的数字

java - 递归线性搜索 - StackOverflowError

java - 使用<上下文:component-scan base-package/> in annotation based configuration

sql - 在 SQL Server 上的多个数据库中搜索列名

sql server 将日期时间转换为另一个时区?

mysql - 如何按特定值计算列?