java mysql大小写_MySQL大小写敏感的解决方案
前言:对于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大小写敏感的解决方案相关推荐
- java mysql 项目_mysql数据库如何实现与Java项目连接
mysql数据库如何实现与Java项目连接 发布时间:2020-11-09 16:47:40 来源:亿速云 阅读:68 作者:Leah mysql数据库如何实现与Java项目连接?很多新手对此不是很清 ...
- java mysql主从复制_MySQL主从复制的实现过程
一.什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数据库保持一致. 二.主从复制的作用 1.主数据库出现问题 ...
- java mysql 全文索引_MySQL索引原理
什么是索引? "索引"是为了能够更快地查询数据.比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节. 数据库也是一样 ...
- java mysql 更新_MySQL更新和删除数据
1. 更新数据 更新数据 update customers set cust_email = 'elmer@fudd.com' where cust_id = 10005; 更新多列 update c ...
- java mysql选择题_MySQL选择填空基础题
1.三级模式是对( 数据 )的三个抽象级别. 2.下列选项中,不属于DDL语句的是( SELECT语句 ). 3.下列选项中,哪个是MySQL默认提供的用户( root ). 二.多选题(共2题,14 ...
- java mysql 变量_mysql中的变量
一.系统变量 1. 查看所有系统变量 show variables; 2. 查看变量值 select @@变量名; -- 任何一个有数据返回的内容都是由select来查看 3. 修改变量 会话级修改: ...
- java mysql时间戳_mysql肿么将java时间戳转换
mysql查询时间戳和日期的转换 在数据库的使用中,经常需要按指定日期来查询记录,以便于统计,而在数据库中,有很多存储的是时间戳, 也有的直接存日期,查询的时候可能不是那么好弄. mysql提供了两个 ...
- java mysql 变量_MySQL基础_变量
一. 系统变量: 变量由系统提供的,不用自定义,又分为全局变量和会话变量. 1. 全局变量 作用域:针对于所有会话(连接)有效,但不能跨重启 #查看所有全局变量 SHOW GLOBAL VARIABL ...
- java mysql 分区表_mysql 分区有实用价值吗?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小和尚的庙里住进了一位女施主. 小和尚吓坏了,逃去殿里敲木鱼.山下的女人是老虎,现在老虎居然住进庙里了,看来自己和师父是要被吃了. 女施主闲暇无事,也走到 ...
最新文章
- nginx上传文件大小
- OpenCASCADE:函数机制的使用
- C语言实现顺序栈心得
- C语言写300k文件大概多少行,为什么 DELPHI 编译出的程序一般的来说至少都有300k呢?...
- 实验4 数据查询--简单查询
- 别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!
- quot;蓝筹quot;如何使程序猿?
- Spring源代码解析
- [python] 解决OSError: Address already in use
- 2021年行政区划代码
- Itext 7 生成PDF总结
- Mac的反编译工具一:otool (objdump工具的OSX对应工具)。
- PNETLAB模拟器汉化使用
- 计算机网络的雏形为,计算机网络的发展雏形是什么(图文)
- 注塑行业MES实施方案
- 科技学术论文润色经验——分享1
- win7搜不到特定网络
- c实用技巧:纯c对于excel数据表的处理
- Linux查看CPU、内存、硬盘、操作系统相关详细信息
- 对vue生命周期的深入理解
热门文章
- JZOJ 1036. 【SCOI2009】迷路
- 用toString生成随机字符
- iOS之LLDB常用调试命令
- int a[5]={1,2,3,4,5}; int *p=(int*)(a+1); printf(%d,*(p-1)); 答案为什么是5?
- 使用工具包自动生成向EBS系统注册表和字段的代码
- TCP/IP笔记 应用层(2)——FTP
- 对象序列化Java中的序列化
- Debugging with GDB (2) 调用GDB
- [项目回顾]基于Annotation与SpringAOP的缓存简单解决方案
- 清华大学崔鹏:因果推断技术最新的发展趋势及在推荐系统中的应用