![](/img/trans.png)
[英]Case insensitive query that returns case sensitive data with Hibernate and 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.