Spring JPA MYSQL 字符编码区分大小写

问题描述

我正在使用 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