学校网站建设方面汇报,php网站开发和部署,替别人做网站管理员,上海网站建设公司页溪网络前言#xff1a;对于MySQL的大小写敏感的影响#xff0c;笔者在一个小项目中深刻的体会到#xff1a;当想要查询一条数据时#xff0c;总是出来两条或多条#xff0c;后来发现是大小写敏感造成的原因#xff0c;本文就该问题提出解决方案。 1.MySQL大小写敏感的控制 mysq…前言对于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_names0对表明的大小写是敏感的。注笔者数据版本为5.7.22。 注lower_case_file_systemOFF表示大小写敏感ON表示大小写不敏感。lower_case_table_names0表示敏感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 Chen2018.7.2日下午。转载于:https://www.cnblogs.com/developer_chan/p/9247674.html