前言:对于MySQL的大小写敏感的影响,笔者在一个小项目中深刻的体会到:当想要查询一条数据时,总是出来两条或多条,后来发现是大小写敏感造成的原因,本文就该问题提出解决方案。

1.MySQL大小写敏感的控制

mysql是通过lower_case_table_names参数来控制大小写敏感的,该参数在[mysqld]结点下。具体的含义笔者从官网截了一张图。

注:

①关于lower_case_table_names参数对表名称或数据库名称大小写敏感的控制。

②Unix下默认为0,也就是大小写敏感的;Windows下默认为1,不敏感;macOS默认为2,存储区分大小写,但是在查询时会转换为小写。

③对于在大小写不敏感的系统(Windows和macOS)不能将该字段设置为0。

2.出现的问题

#1.Linux下默认lower_case_table_names=0,对表明的大小写是敏感的。注:笔者数据版本为5.7.22。

注:lower_case_file_system:OFF表示大小写敏感,ON表示大小写不敏感。lower_case_table_names:0表示敏感,1表示不敏感。

#2.具体演示。

注:创建test表,并插入一条数据。

Case 1:

分析:

对比两组查询,可以知linux下,mysql默认对表名大小写敏感。

Case 2:

分析:

利用‘Aa’和‘aa’查询出相同的结果,说明查询时对字段内容进行了转换(大写转换成小写),造成了这一现象。

Case 3:

分析:

在查询时,对字段‘Name'也可查询结果,表明在查询时对字段的大小写不敏感。

综合以上几个Case可得出如下结论:

①linux默认情况下,对数据库名和表名的大小写是敏感的,因为linux系统本身对大小写就敏感。

②字段内容大小写不敏感。

③列名大小写不敏感。

对于上述出现的问题,对实际的业务还是有相应影响的,因此应寻找对应的解决方案。

3.字段内容及列名大小写不敏感的解决方案

①创建表时,将字段标记为binary,二进制大小写是敏感的。

②在查询条件的字段前加binary,但是不建议这么做,因为会使字段索引失效。

③建表时设置校对规则(collate)。

collate规则:

*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写。

*_ci: case insensitive collation,不区分大小写 。

④如果建表时校对规则未用*_bin,则可直接修改字段的属性。

alter table test3 modify name varchar(20) collate utf8_bin;

总结

只要在创建表的时候指定collate为utf8_bin,就可以实现大小写敏感,如果建表时未指定,则可修改字段的校对规则,也可以实现大小写敏感。

by Shawn Chen,2018.7.2日,下午。

java mysql大小写_MySQL大小写敏感的解决方案相关推荐

  1. java mysql 项目_mysql数据库如何实现与Java项目连接

    mysql数据库如何实现与Java项目连接 发布时间:2020-11-09 16:47:40 来源:亿速云 阅读:68 作者:Leah mysql数据库如何实现与Java项目连接?很多新手对此不是很清 ...

  2. java mysql主从复制_MySQL主从复制的实现过程

    一.什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数据库保持一致. 二.主从复制的作用 1.主数据库出现问题 ...

  3. java mysql 全文索引_MySQL索引原理

    什么是索引? "索引"是为了能够更快地查询数据.比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节. 数据库也是一样 ...

  4. java mysql 更新_MySQL更新和删除数据

    1. 更新数据 更新数据 update customers set cust_email = 'elmer@fudd.com' where cust_id = 10005; 更新多列 update c ...

  5. java mysql选择题_MySQL选择填空基础题

    1.三级模式是对( 数据 )的三个抽象级别. 2.下列选项中,不属于DDL语句的是( SELECT语句 ). 3.下列选项中,哪个是MySQL默认提供的用户( root ). 二.多选题(共2题,14 ...

  6. java mysql 变量_mysql中的变量

    一.系统变量 1. 查看所有系统变量 show variables; 2. 查看变量值 select @@变量名; -- 任何一个有数据返回的内容都是由select来查看 3. 修改变量 会话级修改: ...

  7. java mysql时间戳_mysql肿么将java时间戳转换

    mysql查询时间戳和日期的转换 在数据库的使用中,经常需要按指定日期来查询记录,以便于统计,而在数据库中,有很多存储的是时间戳, 也有的直接存日期,查询的时候可能不是那么好弄. mysql提供了两个 ...

  8. java mysql 变量_MySQL基础_变量

    一. 系统变量: 变量由系统提供的,不用自定义,又分为全局变量和会话变量. 1. 全局变量 作用域:针对于所有会话(连接)有效,但不能跨重启 #查看所有全局变量 SHOW GLOBAL VARIABL ...

  9. java mysql 分区表_mysql 分区有实用价值吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小和尚的庙里住进了一位女施主. 小和尚吓坏了,逃去殿里敲木鱼.山下的女人是老虎,现在老虎居然住进庙里了,看来自己和师父是要被吃了. 女施主闲暇无事,也走到 ...

最新文章

  1. nginx上传文件大小
  2. OpenCASCADE:函数机制的使用
  3. C语言实现顺序栈心得
  4. C语言写300k文件大概多少行,为什么 DELPHI 编译出的程序一般的来说至少都有300k呢?...
  5. 实验4 数据查询--简单查询
  6. 别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!
  7. quot;蓝筹quot;如何使程序猿?
  8. Spring源代码解析
  9. [python] 解决OSError: Address already in use
  10. 2021年行政区划代码
  11. Itext 7 生成PDF总结
  12. Mac的反编译工具一:otool (objdump工具的OSX对应工具)。
  13. PNETLAB模拟器汉化使用
  14. 计算机网络的雏形为,计算机网络的发展雏形是什么(图文)
  15. 注塑行业MES实施方案
  16. 科技学术论文润色经验——分享1
  17. win7搜不到特定网络
  18. c实用技巧:纯c对于excel数据表的处理
  19. Linux查看CPU、内存、硬盘、操作系统相关详细信息
  20. 对vue生命周期的深入理解

热门文章

  1. JZOJ 1036. 【SCOI2009】迷路
  2. 用toString生成随机字符
  3. iOS之LLDB常用调试命令
  4. int a[5]={1,2,3,4,5}; int *p=(int*)(a+1); printf(%d,*(p-1)); 答案为什么是5?
  5. 使用工具包自动生成向EBS系统注册表和字段的代码
  6. TCP/IP笔记 应用层(2)——FTP
  7. 对象序列化Java中的序列化
  8. Debugging with GDB (2) 调用GDB
  9. [项目回顾]基于Annotation与SpringAOP的缓存简单解决方案
  10. 清华大学崔鹏:因果推断技术最新的发展趋势及在推荐系统中的应用