use*_*339 3 postgresql java-ee jpa-2.0 postgresql-9.1
我有一个使用PostgreSQL 9.X和JPA2(Hibernate实现)的Java EE项目.如何强制类似查询不区分大小写并且不区分重音?
我能够更改数据库的字符集,因为它是第一个使用它的项目.
通常,没有标准的方法来编写"不区分重音"的代码,或者在忽略重音时比较单词的相等性.整个想法毫无意义,因为不同的重音字符在不同的语言/方言中意味着不同的东西,并且它们的"简单的ascii"替换/扩展因语言而异.请不要这样做; resume并且résumé是不同的词,并且在考虑除英语之外的任何语言时情况变得更糟.
对于不区分大小写,您可以lower(the_col) like lower('%match_expression')在JPQL中使用.据我所知ilike,JPQL不支持,但我没有检查标准来验证这一点.它相当可读,所以请考虑下载JPA2规范并阅读它.JPA2 Criteria提供Restrictions.ilike此目的.也不会规范化/剥离/忽略重音字符.
对于剥离重音等,您可能需要使用特定于数据库引擎的存储函数或本机查询.见,例如在此之前的答案,或者您打算替换重音的字符与重音替代这个PostgreSQL的维基条目 -但是,请不要这样做,除了非常有限的目的,如发现地方的话may've被"重音"被误导的软件或用户.
| 归档时间: |
|
| 查看次数: |
10696 次 |
| 最近记录: |