Spring 数据 JPA existsByField 在 MySQL 中不区分大小写,如何使其区分大小写

Ano*_*der 5 java mysql spring jpa spring-data-jpa

ClientsRepository 类

public interface ClientsRepository extends JpaRepository<ClientsEntity, Long> {

    boolean existsByClientId(String clientId);

}
Run Code Online (Sandbox Code Playgroud)

ClientsEntity 类

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "clients")
public class ClientsEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String clientId;

}
Run Code Online (Sandbox Code Playgroud)

客户表
| id | client_id | |---------------------|------------------| | 1 | ABC | |---------------------|------------------|

调用existsByClientId("abc") 时它返回true,如何强制检查大小写?

实际结果:
existsByClientId("abc") --> true
existsByClientId("ABC") --> true

预期结果:
existsByClientId("abc") --> false
existsByClientId("ABC") --> true

Java 版本 8
Spring Boot 版本 2.1.2.RELEASE
mysql-connector-java 版本 5.1.46

sam*_*cde 0

默认情况下,派生的 SQL 查询区分大小写。然而,正如文中所说然而,正如文件

\n\n
\n

方法解析器支持为单个属性(例如,findByLastnameIgnoreCase(\xe2\x80\xa6))或支持忽略大小写的类型的所有属性(通常为 String 实例\xe2\x80\x89\xe2\x80)设置 IgnoreCase 标志。 \x94\xe2\x80\x89 例如,findByLastnameAndFirstnameAllIgnoreCase(\xe2\x80\xa6))。是否支持忽略大小写可能因商店而异,因此具体商店的查询方法请参阅参考文档中的相关部分

\n
\n\n

由于我们使用的是 MySQL 数据库,大小写敏感度取决于服务器、数据库和连接排序规则,默认排序规则(utf8mb4_0900_ai_ci)不区分大小写,使得比较不区分大小写。与其他数据库进行比较时产生意想不到的结果。

\n\n

MySQL case insensitive select的解决方案来看,将列排序规则更改为区分大小写是最简单的,不需要更改代码。

\n