问题描述
当我们输入不管大小写都能查询到数据,例如:输入 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环境下创建文件时一定要记得这一点,不然会出问题。