引言

被舍友问了JPA的查询问题,问题问的我一脸懵逼。

天真的我顺手搭了一个小的JPA项目试一试。

探究

尝试

测试环境:spring-boot 2.1.5.RELEASE、mysql 5.6。

数据表中加了一条数据,用户名是admin。

测试代码如下:

@Test

public void test() {

Teacher teacher1 = teacherRepository.findByUsername("ADMIN");

Teacher teacher2 = teacherRepository.findByUsername("admin");

System.out.println(teacher1);

System.out.println(teacher2);

}

如果teacher1有值的话,说明查询不区分大小写,如果为null,说明区分大小写。

两者都有值,说明查询的时候未区分大小写。

根源

打开JPA的官方文档,根据JPA官方的说明来看,规范里设计的是查询是区分大小写的。

默认区分大小写,如果不想区分大小写使用IgnoreCase关键字。

问题出在MySQL上,经过查阅与请教,是MySQL不区分大小写。

用ADMIN去MySQL里查,也是能查出的数据,与JPA无关。

尝试解决

毕竟生产环境的项目跑着呢,和舍友讨论了讨论觉得用户名的大小写不敏感应该造成不了什么危害。

但是遇到问题就得解决,经过多方参考,发现是mysql中collation的配置问题。

collation [kəˈleɪʃn]

我们建立数据库时都会选择utf8_general_ci,这个collation决定了大小写不敏感。

ci: case insensitive, a is equal to A.

cs: case sensitive, a is not equal to A.

那是不是改成utf8_general_cs问题就解决了呢?

对不起,cs已经被mysql废弃了,没有一个cs的选项。

因为utf8是包含所有语言,针对不同语言的大小比较处理十分困难,遂被mysql抛弃。

既然官方都这么说了,那还纠结大小写干啥呢?

总结

最精髓的就是这两个关键字,请大家务必记住!

ci: case insensitive, a is equal to A.

cs: case sensitive, a is not equal to A.

mysql忽略大小写jpa解决_JPA 大小写敏感问题相关推荐

  1. mysql忽略大小写jpa解决_春数据JPA查询生成忽略大小写,以避免列数据

    我使用的是春天的数据JPA获取使用ignoreCase属性数据为大写:春数据JPA查询生成忽略大小写,以避免列数据 Employee类: import javax.persistence.Entity ...

  2. docker mysql忽视大小写_Docker安装MySQL忽略大小写问题的问题

    Docker安装MySQL忽略大小写问题的问题 连接MySQL: 查看当前mysql的大小写敏感配置 show global variables like '%lower_case%'; +----- ...

  3. Docker安装MySQL忽略大小写问题的问题

    由于linux中mysql的的表名是区分大小写的.所以需要配置my.conf. 所以在docker中需要把配置文件带进去.在宿主机的目录中新建my.conf文件,然后写入如下配置. [mysqld] ...

  4. Mysql忽略大小写 如何处理

    问题描述: 一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下: 1 2 3 4 5 6 7 8 9 10 11 12 ...

  5. Linux mysql忽略大小写

    mysql表忽略大小写 因为linux下mysql默认是要区分表名大小写的.mysql是否区分大小写设置是由参数lower _ case _ table _ names决定的,其中: lower_ca ...

  6. mysql忽略大小写配置cnetos_CentOS7下安装MYSQL8.X并设置忽略大小写

    安装 在官网上下载:mysql80-community-release-el7-2.noarch.rpm.安装方式与5.7没有任何区别.详细见:CentOS7下安装MYSQL5.7. 设置忽略大小写 ...

  7. mysql存储过程 大小写_MySQL数据记录大小写敏感问题【转】

    MySQL大小写敏感 字符串大小写敏感和Mysql的数据库的名字.表名字.字段名字.还有字段值有关. 1.和数据库名字.表名字.存储过程和触发器有关 为0时: 表示区分大小写,使用CREATE TAB ...

  8. docker安装mysql8 并且忽略大小写问题解决

    一.docker安装mysql8 1.拉取镜像.docker pull mysql 2.docker安装mysql,只需要执行docker run --name mysq.db -p 3306:330 ...

  9. mysql 忽略表大小写_mysql表名忽略大小写问题记录

    问题描述: 一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下: mysql> show tables; +-- ...

最新文章

  1. BZOJ2938:[POI2000] 病毒
  2. ML之RFDT:利用RF(RFR)、DT(DTR)两种算法实现对boston(波士顿房价)数据集进行训练并预测
  3. Hive 基础(2):库、表、字段、交互式查询的基本操作
  4. apache ab压力测试报错apr_socket_recv
  5. pageContext对象和config对象
  6. ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
  7. Dalvik虚拟机简要介绍和学习计划
  8. php web教程视频教程下载,Web全栈 PHP+React系列视频教程下载
  9. 作者:何波(1989-),男,就职于中国信息通信研究院互联网法律研究中心
  10. 连接mysql数据库时提示2003-can t connect to MySQL server on ip(10060)的解决办法
  11. WordPress 修改固定链接出错(apache2)
  12. JavaScript-数组相关作业
  13. 低代码开发平台_如何挑选最适合你的低代码开发平台
  14. TimeSpan asp.net中时间的运算
  15. 举例说明在SQL中,DELETE语句与DROP TABLE的区别
  16. 停用chrome的开发者提醒
  17. pkcs8格式证书转换pkcs1格式
  18. 漫画 | 前端发展史的江湖恩怨情仇
  19. 利用Python制作属于自己的炫酷二维码
  20. 如何智慧的提问(个人笔记)

热门文章

  1. Telerik Kendo UI 那点事【2】中文化(汉化)
  2. cocoscreator练手 入门 Flappy Bird 像素鸟项目(2)加入水管
  3. linux解压 tar -zxvf 代码
  4. Python Tornado框架
  5. Centos7 vsftpd 完整配置
  6. 字典(汇编指令 INT 21H)
  7. Makefile中的ifeq 多条件使用
  8. Linux下源码安装python3、配置pip国内源、生成requirements.txt总结
  9. js前端动态生成变量及python后端动态生成变量接收
  10. 美国顶尖 AI+教育公司,都在研究些什么?