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 |
|---------------------|------------------|
当调用existByClientId(“ 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
答案 0 :(得分:0)
默认情况下,派生的SQL查询区分大小写。但是,正如document
中所述方法解析器支持为单个属性(例如,findByLastnameIgnoreCase(…))或支持忽略大小写的类型的所有属性(通常为String实例,例如,findByLastnameAndFirstnameAllIgnoreCase(…))设置IgnoreCase标志。 是否支持忽略案例可能因商店而异,因此请参考参考文档中有关商店特定查询方法的相关章节。
由于我们正在使用MySQL数据库,因此区分大小写取决于服务器,数据库和连接排序规则,default collation(utf8mb4_0900_ai_ci)不区分大小写,从而使比较不区分大小写。与其他数据库比较时创建意外结果。
从MySQL case insensitive select的解决方案来看,将列排序规则更改为区分大小写是最简单的,不需要更改代码。