繁体   English   中英

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

[英]Spring data JPA existsByField is case insensitive in MySQL, how to make it case sensitive

ClientsRepository 类

public interface ClientsRepository extends JpaRepository<ClientsEntity, Long> {

    boolean existsByClientId(String clientId);

}

ClientsEntity 类

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

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

    private String clientId;

}

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

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

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

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

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

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

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

由于我们使用的是 MySQL 数据库,大小写取决于服务器、数据库和连接排序规则,并且默认排序规则(utf8mb4_0900_ai_ci)不区分大小写,因此比较不区分大小写。 与其他数据库比较时产生意外结果。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM