【MySQL】如何让数据库查询区分大小写

问题描述

当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明在MySQL中,查询条件对大小写不敏感。

select * from some_table where str='abc';
select * from some_table where str='ABC'; -- 查询结果相同

解决方法

方法一:查询时指定

可以将查询条件用binary()括起来。

select * from TableA where binary columnA ='aaa';

方法二:修改字段属性

修改该字段的 collation 为 binary。

在实际使用时,因为 Python 的 SQLAlchemy 没有区分大小写的选项(暂时没找到),所以就用这种方法,直接改字段属性了。

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

-- 示例2(实际使用的,环境 MySQL5.7)
ALTER TABLE `dbname`.`tablename` 
CHANGE COLUMN `key` `key` VARCHAR(100) binary NULL DEFAULT NULL ;

方法三:建表时指定

在建表时时候加以标识

create table some_table(
   str char(20) binary 
)

原理:

对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的 校对规则。BINARY属性是指定列字符集的二元 校对规则的简写。排序和比较基于数值字符值。因此也就自然区分了大小写。


拓展

关于 mysql 表名默认 windows 不区分大小写 在linux 区分大小写

因为操作系统本身的原因,Linux是严格区分大小写的。

在linux下开发是支持大小写区分的,所以在文件命名的时候没有什么问题
但是在WINDOWS下进行开发时一定要注意这个问题,windows默认是不支持大小写区分的。
在windows环境下创建文件时一定要记得这一点,不然会出问题。

发布了552 篇原创文章 · 获赞 201 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/103814225