mysql查询时不区分大小写

  一次偶然的机会,发现在登陆验证时,改变用户名的大小写,同样可以登录成功,这是由于,当时使用的mysql数据库对大小写不敏感,查询时总是能查询到数据。一番查找资料,给出的原因是:在创建数据库的时候,选择了utf8_general_ci排序规则。

  创建数据库时,需要同时选择字符集和排序规则,字符集大家都知道是怎么回事,那排序规则干嘛用的呢?

  排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:
    1、 两个不同的字符集不能有相同的排序规则
    2、 两个字符集有一个默认的排序规则
    3、 有一些常用的命名规则:如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary)。

  我用的是5.6版本的mysql,对于这个版本是不支持utf8的cs排序规则,如果要想对大小写敏感,可以使用_bin的排序规则。

  与此同时,可以使用“show COLLATION;”查询当前版本的数据库支持的所有排序规则。使用 “show charset like ‘utf8%‘;”进一步查看当前字符集的默认排序规则是什么。

  对于_ci的规则,表示不区分大小写,如图所示:

  对于使用_bin排序规则的查询如下:

   对于已经创建好的表,可以是用如下命令进行修改(修改表结构的Collation属性):

    ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

    上面着重色部分分别表示表名和列名。

  

原文地址:https://www.cnblogs.com/onedayinMay/p/12203562.html

时间: 2024-10-11 02:41:10

mysql查询时不区分大小写的相关文章

MySQL查询时强制区分大小写

平时很少会考虑数据存储需要明确字符串类型字段的大小写,MySQL默认的查询也不区分大小写.但作为用户信息,一旦用户名重复,又会浪费很多资源.再者,李逵.李鬼的多起来,侦辨起来很困难.要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感).如果通盘数据库所有字段都需要大小写敏感,不如在字符集设置时做好调整.不过,通常不建议这么做. 如果跟我一样,数据库已经在线上跑了,一个表上百万条数据,做字段类型变更有可能导致数据库宕机.那么好吧,在查询时,多加个单词好了! 例如,一般查询: SELEC

转!!mysql 查询条件不区分大小写问题

做用户登录模块时,输入用户名(大/小写)和密码 ,mysql都能查出来.-- mysql查询不区分大小写. 转自 http://blog.csdn.net/qishuo_java/article/details/40118937 找出用户名id为'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'的用户的数据: select * from usertable where id = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'; 结果出现两条记录.这就奇怪了

MySQL查询时区分大小写

1.一种方法是可以设置表或行的collation,使其为binary或case sensitive.在MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,不区分大小写 ########### # Start binary colla

【MySQL】查询时强制区分大小写的方法

MySQL默认的查询也不区分大小写.但作为用户信息,一旦用户名重复,又会浪费很多资源.再者,李逵.李鬼的多起来,侦辨起来很困难.要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感) sql : create table table_name( name varchar (20) binary ); 查询 SELECT * FROM U WHERE binary name LIKE 'a%'; SELECT * FROM U WHERE binary name LIKE 'A%'; 仅

mysql查询时乱码解决办法

一次建表时显示中文正常,建表后查询却是乱码. mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | ?????          | | table1         | +----------------+ 2 rows in set (0.00 sec) 一般出现这种情况是因为客户端和服务端的编码类型不一致导致. 查看一些客户端和服务端的编码类型: mysql>  show variab

Postgresql查询时不区分大小写

postgresql提供有强大的正则表达式系统,可以在数据库级别实现模糊查询. 正则表达式匹配操作符: 操作符 描述 例子 ~ 匹配正则表达式,大小写相关 'thomas' ~ '.*thomas.*' ~* 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写相关 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.*' 例如: 找出数据表account中所有

MySQL 查询不区分大小写的问题以及编码格式问题

查询不区分大小写 最近,在用SSH框架完成一个实践项目时,碰到了一个莫名其妙的Bug困扰了我好久,最后终于解决,记录如下. 问题:同学在测试系统的时候突然发现,数据库保存的账户本来应该是admin,结果该同学用Admin账户居然登录成功了…… ……EXM???这样也行?好吧,我还是查找这个Bug发生的原因吧.然后就是各种排查程序的过程,找来找去也没发现什么问题.终于想到,不用hql,自己写sql语句在数据库里面直接查询试试,结果果然发现了问题所在: select * from user wher

MySQL查询LIKE如何匹配下划线 通配符转义

MySQL查询时使用LIKE匹配下划线,您会发现连查询“%A_B%”时会出现“%A B%”和“%AB%”也查询出来了,这是因为下划线也被当作特殊字符,做了任意匹配转换了,所以,要想匹配下划线,那么就需要“转义”一下.转义的方法有如下(示例想查询A_B匹配字段). 一.使用Escape转义 示例: SELECT * FROM mytable WHERE col LIKE '%A#_B%' ESCAPE '#'; 或, SELECT * FROM mytable WHERE col LIKE '%A

Mycat查询时出现:Error Code: 1064. can't find any valid datanode

说明:这个错误是查询时条件字段超过了范围导致的. 解释: 为什么会出现范围问题? 一般在MySQL查询时不会因为字段的值超过了范围而导致的,但是在Mycat中却不是这样认为的,Mycat是由于采用的分片的机制,而每个分片采用枚举的算法,然后根据索引进行分片,然后这些枚举会定义一定的范围,所以当这个查询的值大于这个范围就出现找不到的情况了. 这个解释好理解,但不一定正确,只是做为一个参考. 参考: https://www.cnblogs.com/ivictor/archive/2016/01/25