加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中where查询的案例解析

发布时间:2022-03-10 14:13:57 所属栏目:MySql教程 来源:互联网
导读:这篇文章将为大家详细讲解有关MySQL中where查询的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 今天加班,业务的妹子过来找我们查数据,说数据查出来量不对。一看妹子的SQL是这样写的: select distinct
       这篇文章将为大家详细讲解有关MySQL中where查询的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
   
      今天加班,业务的妹子过来找我们查数据,说数据查出来量不对。一看妹子的SQL是这样写的:
 
     select distinct * from prvt_pub_stmt_vnwhere issue_time >= '2020-08-01'and issue_time <= '2020-08-01'and prs_dmtd_cde in ('p','n');复制代码
      我分析来分析去,感觉没有问题呀,于是查了一下prs_dmtd_cde 字段的码值,发现不仅有大写的P还有小写的p,而妹子只查了小写的p,数据量却多了很多。
 
      于是我就把妹子的SQL改了一下:
 
select distinct * from prvt_pub_stmt_vnwhere issue_time >= '2020-08-01'and issue_time <= '2020-08-01'and prs_dmtd_cde in ('p','n','P','N');复制代码
查出来的结果竟然是一样的。

解决方案
问题原因找到了,那就对症下药好了。
 
解决方法自然就是直接修改字段的 collate 属性为 utf8_bin。
 
ALTER TABLE prvt_pub_stmt_vn CHANGE prs_dmtd_cde prs_dmtd_cde VARCHAR(255)
CHARACTER SET utf8 COLLATE utf8_bin;复制代码
另外还有一种解决方法,就是不改变原有表结构,而是改SQL。在查询字段前加上 binary 关键字。
 
select distinct * from prvt_pub_stmt_vnwhere issue_time >= '2020-08-01'and issue_time <= '2020-08-01'and binary prs_dmtd_cde in ('p','n');复制代码
Mysql 默认查询是不分大小写的,可以在 SQL 语句中加入 binary 来区分大小写。
 
binary 不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读