MySql查询不区分大小写解决方案
背景
当我们输入不管大小写都能查询到数据,例如:输入 lingyejun 或者Lingyejun ,LingYeJun都能查询同样的结果,说明查询条件对大小写不敏感。
CREATE TABLE NAME(name VARCHAR(10));
对这个表,缺省情况下,下面两个查询的结果是一样的:
SELECT * FROM TABLE NAME WHERE name='lingyejun';
SELECT * FROM TABLE NAME WHERE name='Lingyejun';
办法
解决方案一:
于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。
通过查询资料发现需要设置collate(校对) 。 collate规则:
- *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
- *_cs: case sensitive collation,区分大小写
- *_ci: case insensitive collation,不区分大小写
一般而言我们设置字符集注意以下两种:
utf8_general_ci --不区分大小写
utf8_bin--区分大小写
当字符设置为不区分大小写时的解决办法:
1.可以将查询条件用binary()括起来。 比如:
1 | select * from TableA where binary columnA = 'lingyejun' ; |
2. 可以修改该字段的collation 为 binary
比如:
1 | ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR (50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL ; |
解决方案二:
mysql查询默认是不区分大小写的 如:
1 2 | select * from some_table where str=‘lingyejun '; select * from some_table where str=' LINGYEJUN'; |
得到的结果是一样的,如果我们需要进行区分的话可以按照如下方法来做:
第一种方法:
要让mysql查询区分大小写,可以:
1 2 | select * from some_table where binary str= 'lingyejun' select * from some_table where binary str= 'LINGYEJUN' |
第二方法:
在建表时时候加以标识
1 2 3 | create table some_table( str char (20) binary ) |
原理:
对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的 校对规则。BINARY属性是指定列字符集的二元 校对规则的简写。排序和比较基于数值字符值。因此也就自然区分了大小写。
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)