如何在PostgreSQL和JPA 2中做一个不区分大小写和重音不敏感的东西?

use*_*339 3 postgresql java-ee jpa-2.0 postgresql-9.1

我有一个使用PostgreSQL 9.X和JPA2(Hibernate实现)的Java EE项目.如何强制类似查询不区分大小写并且不区分重音?

我能够更改数据库的字符集,因为它是第一个使用它的项目.

Cra*_*ger 5

通常,没有标准的方法来编写"不区分重音"的代码,或者在忽略重音时比较单词的相等性.整个想法毫无意义,因为不同的重音字符在不同的语言/方言中意味着不同的东西,并且它们的"简单的ascii"替换/扩展因语言而异.请不要这样做; resume并且résumé不同的词,并且在考虑除英语之外的任何语言时情况变得更糟.

对于不区分大小写,您可以lower(the_col) like lower('%match_expression')在JPQL中使用.据我所知ilike,JPQL不支持,但我没有检查标准来验证这一点.它相当可读,所以请考虑下载JPA2规范并阅读它.JPA2 Criteria提供Restrictions.ilike此目的.也不会规范化/剥离/忽略重音字符.

对于剥离重音等,您可能需要使用特定于数据库引擎的存储函数或本机查询.见,例如在此之前的答案,或者您打算替换重音的字符与重音替代这个PostgreSQL的维基条目 -但是,请不要这样做,除了非常有限的目的,如发现地方的话may've被"重音"被误导的软件或用户.