MySQL中使用binary查询字符串
今天,在做老师布置的实验作业时候遇到一个关于MySQL字符串比较问题。场景是这样的,就是需要在数据库中查询记录而进行字符串比较时,需要对字符串进行大小写区分比较,这样在默认情况下进行操作可能不会达到你想要的效果。比如下面实例:
|
|
经测试,发现上面两条SQL语句的执行结果是一样的,这个结果并不是我们想要的,怎么解决?
问题探究
在我看来,做技术有一点要清楚的是:解决问题一定要抓住问题的本源,从而游刃有余。下面,我们看看这个小问题是咋回事的呢?
通过看MySQL手册可以知道,默认情况下,对MySQL数据库中的字段进行查询或者排序都是不区分大小写的。
但是在有些应用中,需要进行区分大小写的操作,咋办?
答:使用BINARY操作符。
BINARY操作符将后面的字符串抛给一个二进制字符串。这是一种简单的方式来促使逐字节而不是逐字符的进行列比较。这使得比较区分大小写,即使该列不被定义为 BINARY或 BLOB。
BINARY影响整个比较;它可以在任何操作数前被给定,而产生相同的结果。
解决方法
1、第一种是在创建表结构时候使用binary属性来定义字段:
|
|
或者在表结构创建好后使用alter来添加字段binary属性
|
|
2、第二种方法是在sql语句中使用bianry来进行区分大小写操作:
|
|
进过测试发现,使用SELECT * FROM user where name=binary 'maratrix';
效率更高点,原因是将binary放在字符串前会使用索引(假设该字段存在索引),而将binary放在字段前面将不会使用索引,即使索引存在也不会使用。
注意
在一些语境中,假如你将一个编入索引的列派给BINARY, MySQL 将不能有效使用这个索引。
- 原文作者:maratrix
- 原文链接:https://maratrix.cn/post/2015/06/07/mysql_str_binary/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。