问题描述:
找出用户名id为’AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h‘的用户的数据:
select * from usertable where id = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';
结果出现两条记录。这就奇怪了,id已经设置为主键,怎么会重复呢?难道是mysql的漏洞。后来发现原来查询出来的两个id的值是不同的,诈一看没什么 区别,仔细看你会发现这两个id只是有一个字母的大小写不同, 这两个id分别为:
'AAMkADExM2M5NjQ2LWUzYzctNdFkMC1h',
'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'.
原来mysql查询时,存在不区分大小写的情况。可以通过binary关键字加以解决。
解决方法有两种:
第一种:让mysql查询时区分大小写
select * from usertable where binary id='AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';
第二种:在建表时加以标识
create table `usertable`( `id` varchar(32) binary, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
或
CREATE TABLE `usertable` ( `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在mysql中,存在大小写问题的地方还有:
(1) 关键字: 不区分大小写 select * fRom table_name 和 select * from table_name 效果是一样的
(2) 标示符(如数据库名称和表名称):不区分大小写。如存在表users,那么select * from users和select * from uSers 效果一样。网上说这跟操作系统有关,在所有Unit操作系统(除了使用HFS+的Mac OS 之外)上都是区分大小写的,而在windows上是不区分大小写的。(网上的这一说法没有验证过,我在windows server2003上是不区分大小写的)
(3) 表的别名:不区分大小写 select m.* from users m where M.username = 'aa';
(4) 列的别名:不区分大小写 select uName from (select username as uname from users where id = 768) ;
相关推荐
当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感。 解决方案一: 于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。 发现的确是...
使MySQL查询区分大小写,sql 语句 查询
MySQL8.0之后,数据库和表名称的大小写问题与之前的MySQL设置不同,需要引起重视,不然后续修改很麻烦。
Mysql查询操作 MySql下实现查询表名不区分大小写
mysql设置不区分大小写 windows下 到安装mysql的目录,修改my.ini文件 在文件最后一行加上下面一句话 lower_case_table_names=1 说明 0:区分大小写,1:不区分大小写 效果如下 [mysqld] port = 3306 basedir=F...
MySQL默认是不区分大小写的,这个涉及到collate字符集与校验规则方面的知识,下面会讲到,这里我们就来详解MySQL查询时区分字符串中字母大小写的方法.
今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢?
mysql查出数据不区分大小写.md
mysql 查询时没有对字符串区分大小写的原因主要在于创建表时没有指定其校对规则,或者校对规则设置成了不区分大小写。 区分大小写的设置通常是: utf8****_bin ,以 “_bin” 结尾的表示区分大小写,它表示的是:...
在MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,...
您可能感兴趣的文章:MySql查询不区分大小写解决方案(两种)MySQL中查询的有关英文字母大小写问题的分析Mysql大小写敏感的问题Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t exist错误教你如何在...
mysql基础-不设置区分大小写
LINUX系统下mysql的大小写区分问题.docx
说明: MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝。 正例: aliyun _ admin , rdc _ config , level 3_