【问题标题】:Spring JpaRepository - findByParam (String param) not case sensitiveSpring JpaRepository - findByParam(字符串参数)不区分大小写
【发布时间】:2020-03-19 12:41:50
【问题描述】:

我正在尝试在具有 Spring Data JPA 的 Spring Boot 2 项目中,在扩展 JpaRepository 的存储库中进行区分大小写查询。

假设如果我不使用IgnoreCase,查询应该区分大小写,但它不会发生。

片段:

    log.info("Received name: " + name);
    Player player = playerRepository.findByName(name).orElseThrow(()-> new NonExistingPlayerNameException(name));
    log.info("Repository player name: " + player.getName());

控制台结果:

    2020-03-19 13:05:02.831  INFO 13739 [...].controllers.PlayerController   : Received name: peter  
    2020-03-19 13:05:02.884  INFO 13739 [...].controllers.PlayerController   : Repository player name: Peter

如您所见,查询不区分大小写,但我希望它区分大小写。

我做错了吗?如何使查询区分大小写?

作为一种解决方法,我可以在收到对象后进行检查并采取相应措施,但我希望查询区分大小写。

提前致谢,
卡洛斯。

编辑:
感谢您的回答,并对错过的信息感到抱歉。
我在 Ubuntu 桌面 19.10 中使用 MySQL 数据库(mysql Ver 8.0.19-0ubuntu0.19.10.3 for Linux on x86_64 ((Ubuntu)))。

很抱歉,我不知道如何记录实际执行的查询。

我可以看到数据库允许我保存一个大写和小写的寄存器,我可以有一个字段名称为“Peter”的行和另一个名称为“peter”的行。我的意思是,数据库似乎并没有改变数据来存储它。

我会看看关于MSSQL Server的答案。

谢谢你,
卡洛斯。

【问题讨论】:

  • 您使用的持久存储是什么?忽略大小写取决于持久性存储。 reference
  • 您也可以记录实际执行的查询
  • 查询是否区分大小写取决于您的数据库,有时甚至取决于您的数据库和操作系统的组合。请在您的问题中说明您使用的是哪个数据库。

标签: spring spring-boot spring-data-jpa


【解决方案1】:

你的问题不在 Spring,你的问题是你的数据库。

查看此链接了解更多信息

在这个线程中,他们解释了如何更改您的数据库,或者更确切地说如何更改您想要敏感的字段

Is the LIKE operator case-sensitive with MSSQL Server?

【讨论】:

    【解决方案2】:

    感谢大家提供的所有信息和“线索”以找出答案。
    问题在于排序规则:我使用的是utf8mb4_0900_ai_ci(不区分大小写)。我将其更改为utf8mb4_es_0900_as_cs,一切正常。
    谢谢!!!
    卡洛斯。

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2013-06-03
      • 1970-01-01
      • 2016-01-26
      • 2014-09-07
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多