gpt4 book ai didi

java - Hibernate 功能 lower 和 upper 不适用于波兰语特殊字符

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:05 24 4
gpt4 key购买 nike

我在 JPA(Hibernate)中遇到了下层和上层函数的问题。在我的应用程序中,用户应该向数据库添加新项目,但名称应该是唯一的。为了实现这一点,我需要将用户输入的字符串与数据库中的字符串进行比较,并在检查时忽略大小写。

不幸的是,由于我使用 Hibernate 函数将所有数据变为大写(为了进行比较),除了波兰语特殊字符保持不变之外,一切正常。

这是我用于测试目的的代码,以检查其是否有效:

TypedQuery<String> query = em.createQuery("SELECT upper(i.name) FROM Item i", String.class);

for (String name: query.getResultList())
System.out.println(name);

这就是我得到的:

  • CZYSTY BANDAż
  • 马利·化学
  • 马利·机械
  • SPRZęT
  • ŚPIWóR
  • ŚRODEK DEZYNFEKUJąCY
  • ŚRODEK CZYSZCZąCY

所有字母均应大写。在数据库中,第一个单词的每个第一个字母始终大写。问题涉及这样的字符:ą, ę, ż, ź, ó, ł - 它们应该看起来像 Ą, Ę, Ż, Ź, Ó, Ł,但 Hibernate 似乎不会将它们识别为单个字符,仅在大小写方面有所不同。

当我使用较低的函数时,也会发生同样的情况。波兰语字符完全不受影响并且保持不变。

我不知道它是否只涉及波兰语字符或也涉及任何其他语言。

对于此事的任何提示,我将非常感激。

编辑:我正在使用 Hibernate 5.2.2 Final 以及 SQLite 数据库和驱动程序 Xerial 3.8.11.2。

EDIT2:如果我尝试使用 Hibernate 的 native SQL 查询来实现这一点,也会发生同样的情况。

最佳答案

我已经找到解决办法了。事实证明,SQLite 不支持 Unicode 排序规则。使用 lower、upper 函数或排序时,仅支持 ASCII 拉丁字符。

有一个扩展(SQLite ICU 扩展),必须使用该扩展来编译 SQLite 才能使用 Unicode 排序规则(或其他排序规则),但就我而言,它并不像我希望的那么简单的解决方案。我决定将数据库提供程序更改为 H2,它默认支持 Unicode 排序规则,无需执行任何修改,现在它就像一个魅力:)

所以这不是 Hibernate 的错,而是 SQLite 的错。非常感谢您的帮助:)

关于java - Hibernate 功能 lower 和 upper 不适用于波兰语特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com