问题描述
我正在使用 JPA 存储库并在其中指定了 findByEmail(email)
方法。当我调用这个方法时它工作正常,唯一的问题是我想要区分大小写。因此,“noemail@noemail”将与“nOeMaIl@NoEmAiL.cOm”不匹配。这不会发生,因为 `findByEmail(email)' 方法将其返回为 true。
当我查看 MysqL 数据库表时,对于在我的实体类中作为字符串列出的每个字段,我看到字符集为“utf8md4”。通过一些阅读,看起来区分大小写适用于 UTF-8 变体,例如“utf8md4_0900_as_cs”,如果是这种情况,不确定如何更改。
如何更改内容以确保 findByEmail(email) 方法在大小写不匹配时返回 false?
@Entity
@Table(name="users",uniqueConstraints={@UniqueConstraint(columnNames="username"})})
@Data
public class user{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "Can't be blank")
@Size(max = 250,message = "Can't exceed 60 characters")
@Email
private String email;
public user() {}
public user(String email) {
this.email = email;
}
}
@Repository
public interface UserRepository extends JpaRepository<user,Long> {
List<user> findByEmail(String email);
}
@PostMapping("/v1/endpoint")
public ResponseEntity<?> forgotusername(@RequestBody String email){
List<user> users = userRepository.findByEmail(email);
return new ResponseEntity<>(users,HttpStatus.OK);
}
spring.datasource.url=jdbc:MysqL://${MysqL_HOST:AWS?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=username
spring.datasource.password=password
解决方法
如果您需要 utf8 字段区分大小写的排序规则,您应该使用 utf8_bin
。您可以扩展 MySQL 方言来实现此目的。看看here。